0

null フレームを取得し続ける理由を知っている人はいますか? 最初の 5 つをスキップしてみましたが、まだ null です。

int _tmain(int argc, char** argv)
{
CvCapture *capture  = cvCaptureFromFile(argv[1]);

int fps = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
IplImage* frame;
cvNamedWindow("video", CV_WINDOW_AUTOSIZE);
while(1)
{
    frame = cvQueryFrame(capture);
    if(!frame)
        break;
    cvShowImage("video", frame);
    char c = cvWaitKey(1000/fps);
    if(c == 33)
        break;
}
cvReleaseCapture( &capture);
cvDestroyWindow( "video" );

return 0;
}
4

3 に答える 3

2

動画ファイルは圧縮されていない avi である必要があります。入力ビデオファイルが圧縮されていないため、cvCapture が null を返したため、実際には null フレームを取得していました。

于 2012-05-17T21:38:33.750 に答える
1

あなたのコードをテストに使用すると、「xvid」形式のビデオでうまく動作します。OpenCV の「キャプチャ」機能は、人気のある古い形式のビデオを処理する可能性があると思います。「H264」形式の動画は動作しない場合があります。

于 2012-05-17T05:32:28.237 に答える
1

失敗するcvCaptureFromFile()と が返さNULLれ、失敗していると思われます。

CvCapture *capture  = cvCaptureFromFile(argv[1]);
if (!capture)
{
    // print error, quit application
}

通常、次のいずれかの理由で失敗します: ファイルが見つからないか、OpenCV がファイルを開く方法を認識していません。たとえば、.mkvファイルは OpenCV ではサポートされていません。

于 2012-05-17T13:06:40.460 に答える