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次迭代后停止,为什么?
答案 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;
//...
}