OpenCV で Logitech C920 からビデオ ストリームをキャプチャしようとしています。Labview を使用すると、30fps 1080p で MJPG ストリームにアクセスできます。opencv では、5fps または 640x480 に制限されています。
カメラ設定に関連するコードは次のとおりです。
this->camRef.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
this->camRef.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);
this->camRef.set(CV_CAP_PROP_FOURCC,CV_FOURCC('M','J','P','G'));
これらはすべて 1 を返しますが、YUY2 ストリームに対応する 1080p の 5fps ストリームを取得します。
次の行を追加すると:
this->camRef.set(CV_CAP_PROP_FPS, 30);
これは 0 を返します。640x480 で 30 fps のストリームを取得します。私には、MJPG 設定が受け入れられないように見えますが、何をすべきか、またはそれを修正する方法がわかりません。
編集: 以下はプログラムをクラッシュさせます。
this->camRef.read(this->image);
std::cout<< this->camRef.get(CV_CAP_PROP_FOURCC) << std::endl;
std::cout<< this->camRef.set(CV_CAP_PROP_FRAME_WIDTH, config.width) << std::endl;
std::cout<< this->camRef.set(CV_CAP_PROP_FRAME_HEIGHT, config.height) << std::endl;
std::cout<< this->camRef.set(CV_CAP_PROP_FOURCC,CV_FOURCC('M','J','P','G')) << std::endl;
std::cout<< this->camRef.get(CV_CAP_PROP_FOURCC) << std::endl;
次に、実行コードには次のものがあります。
void camera::run()
{
while(true)
{
if(this->camRef.read(this->image) == 0)
{
if(this->capture)
{
cv::imwrite(fileName,this->image);
this->count++;
}
}
msleep(15);
}
}
EDIT2: 解決策は、カメラの高さと幅を設定する前に、fourCC コーデックを設定することです。