1
CvCapture* capture = cvCreateFileCapture( filename );
int nFrames = (int) cvGetCaptureProperty( capture , CV_CAP_PROP_FRAME_COUNT );
printf("Frame count - %d\n", nFrames);
while(1){
    frame = cvQueryFrame( capture );
    if( !frame ) {
        break;
    }

}

nFrames == 101 但循环在 101 次迭代后不会停止,为什么?

4

1 回答 1

1

cvQueryFrame返回一个IplImage指针。根据此处的旧文档,它可能会或可能不会在发生错误时返回 NULL 。除了检查它是否为 NULL 之外,您可能还想检查返回IplImage*的数据是否有效,以查看您是否真的得到了帧。

或者更好的是,切换到使用C++ 接口

VideoCapture cap( filename ); 
//check if we succeeded
if(!cap.isOpened())  
{
    //...
}

Mat frame;
for(;;)
{
    //get a new frame from camera
    bool got_frame = cap.read(frame); 

    if(!got_frame)
        break;

    //...
}
于 2013-05-24T05:40:25.997 回答