cvQueryFrame不返回null

时间:2013-05-24 02:27:29

标签: opencv

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次迭代后停止,为什么?

1 个答案:

答案 0 :(得分:1)

cvQueryFrame返回IplImage指针。根据旧文档here可能<或> 错误时返回NULL。除了检查它是否为NULL之外,您可能还想检查返回的IplImage*是否具有有效数据以查看您是否确实有帧。

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

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;

    //...
}