2012-04-08 8 views
3

私の現在の問題は、ビデオファイルからcv::VideoCaptureによってつかまれたcv::Matフレームの種類を知りたいということです。ドキュメントにはそのことが明記されていません(よくあることですが、この特定のケースで見落としてしまったとしても、一般的な問題に対処するための答えを得ることはまだ役立ちます)。人間が判読できるcv :: Matのタイプを決定するには?

もちろん、私は適切なOpenCVヘッダーファイルを開き、、...マクロを使ってMatのtype()に一致するマクロを見つけることができました。しかし、私はそれほど気分が悪いです。より簡単な方法が必要です。

Matのtype()を人間が判読可能な形式に変換する機能はありませんか?このように:

cv::Mat myMatWithUnknownType; 

// Some code modifying myMatWithUnknownType. 
// ... 

std::string readableType = myMatWithUnknownType.typeString(); 
std::cout << readableType; // Prints "CV_64FC3". 

どのように対処しますか?

答えて

1

まず、カメラからのフォーマットは、CV_8UC3の1つのみです。これはOpenCVでハードコーディングされており、すべてのビデオフォーマットはこれに変換されてからユーザに送信されます。したがって

capture >> frame; 

チャンネルごとに8ビットのRGB画像を常に返します。

さて、あなたはOpenCVのではサポートされ非常に多くの種類が存在しないことを半ばに保ち、あなたの関数を書くことができ、他のタイプのために:マットタイプcharucharshortushortintuintfloatにすることができ、double 、1〜512チャンネル(最新のドキュメントによる)です。したがって、自分でtype_to_string()を書くのは難しくありません。

関連する問題