3

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

もちろん、適切な OpenCV ヘッダー ファイルを開いてCV_64FC2, ... マクロを調べて、Mat のtype(). しかし、私はそれにうんざりしています。もっと簡単な方法があるはずです。

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

cv::Mat myMatWithUnknownType;

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

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

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

4

1 に答える 1

1

まず、カメラのフォーマットはCV_8UC3. これは OpenCV でハードコーディングされており、ユーザーに送信される前にビデオ形式がこれに変換されます。そう

capture >> frame; 

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

ここで、OpenCV でサポートされている型がそれほど多くないことを念頭に置いて、他の型について関数を作成できます: Mat は、1 から 512 チャネルの型, char, uchar, short, ushort, int,uintにすることができます (最新のドキュメントによると) .) したがって、自分で作成することは難しくありません。floatdoubletype_to_string()

于 2012-04-08T14:25:08.030 に答える