opencv播放avi文件中的if(!frame)break;的作用是什么?为什么frame=0时退出?

#include<highgui.h>
int main(int argc, char **argv)
{
cvNamedWindow("example2",CV_WINDOW_AUTOSIZE);
CvCapture *capture = cvCreateFileCapture("street performers’life.avi");
IplImage *frame;
while (1)
{
frame = cvQueryFrame(capture);
if (!frame)break;
cvShowImage("example2",frame);
char c = cvWaitKey(33);
if (c == 27)break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("example2");

}

视频数据读取完了,frame = cvQueryFrame(capture);这句得到的frame值就为0,这时可以退出循环了,所以break追问

是不是因为视频数据读完之后,frame变成空指针指向NULL,所以它的值为0?

追答

当frame = cvQueryFrame(capture);读到最后一帧时,frame是有值的,这是正常的,下面的cvShowImage也会播放最后这一帧。然后回去再执行frame = cvQueryFrame(capture);时,frame得到的值就是0了,因为没有数据了嘛,所以就需要break出循环了。

温馨提示:答案为网友推荐,仅供参考
相似回答