4

OpenCV-DirectShow (VFW なし) を使用して、ウェブカメラから生の YUY2画像を取得する方法を知っていますか?

http://opencv.willowgarage.com/wiki/CameraCapture : サンプルを使用して IPL イメージ (Intel Processing Library イメージ) を取得することに成功しました。

コードで関数 cvShowImage() を使用すると、画像が画面上できれいに表示されます。しかし、画面に画像を表示したり、IPL形式にしたりしたくありません.YUYVの生データが欲しいだけです...

wiki ページの 2 番目の部分は私が望むものですが、deviceSetupWithSubtype() は OpenCV 2.4 には存在しないようです (Google でさえそれを知りません)。

編集: 見つけました: ページにリンクされている rar ファイルにあります。Google は rar ファイルを「認識」しません。リンクは次のとおりです: http://opencv.willowgarage.com/wiki/CameraCapture?action=AttachFile&do=get&target=Camera+property+Settings.rar . 私はこれを勉強するつもりです。

4

2 に答える 2

0

通常、opencv は directshow を使用して、Windows の Web カメラから RGB フレームを取得します。Opencv VideoCapture クラスは CV_CAP_PROP_CONVERT_RGB プロパティ (画像を RGB に変換するかどうかを示すブール値フラグ) を取得しますが、すべての Web カメラで機能していません。

DirectShow コードを記述し、独自のサンプル グラバーとコールバックを作成して YUY2 データを取得する代わりに (DirectShow開発を簡素化する素晴らしいツールを作成しました)、CameraDと ( setup Doc ) クラスを変更します (Web ページは中国語です)。 YUY2 データを取得します。

CameraDs.cpp を次のように変更mt.subtype = MEDIASUBTYPE_RGB24;mt.subtype = MEDIASUBTYPE_YUY2;ます (Web カメラがこれをサポートしているかどうかを確認してください)。

RGB 3 チャンネルの代わりに 2 チャンネルの YUY2 画像を作成します。

m_pFrame = cvCreateImage(cvSize(m_nWidth, m_nHeight), IPL_DEPTH_8U, 2);

YUY2 データを外部で取得し、次のような opencv インターフェイスで RGB に変更します。

{
               //query frame
               IplImage * pFrame = camera. QueryFrame();


               //change them to rgb
               Mat yuv (480, 640,CV_8UC2 ,pFrame-> imageData);
               Mat rgb (480, 640,CV_8UC3 );

               cvtColor(yuv ,rgb, CV_YUV2BGRA_YUY2);

               //show image
               //cvShowImage("camera", rgb);
               imshow("camera" ,rgb);

               if ( cvWaitKey(20 ) == 'q')
                      break;
        } 
于 2014-08-06T03:44:44.097 に答える