OpenCV 4.1习题解答

来源:互联网 发布:cad是怎么编程 编辑:程序博客网 时间:2024/05/17 05:12

chap 4.1 习题解答

读取视频文件,显示彩色视频、灰度视频、边缘视频。

#include<opencv2/opencv.hpp>#include<iostream>// chap 4.1 video : frame - gray - cannyvoid main(){using namespace std;CvCapture* capture=cvCreateFileCapture("D:\\video\\case.mp4");IplImage* frame=NULL;while(capture){frame=cvQueryFrame(capture);if(frame==NULL){cout<<"frame error!"<<endl;// display the frame errorbreak;}IplImage* gray=cvCreateImage(cvGetSize(frame),8,1);// gray pic 8UC1IplImage* canny_pic=cvCreateImage(cvGetSize(frame),8,1);// canny_pic  8UC1cvCvtColor(frame,gray,CV_BGR2GRAY);// pay attention to BGR2GRAY ( not RGB2GRAY )cvCanny(gray,canny_pic,100,200,3);// the last parameter must be 3..cvNamedWindow("frame");cvNamedWindow("gray");cvNamedWindow("canny");cvShowImage("frame",frame);cvShowImage("gray",gray);cvShowImage("canny",canny_pic);if(cvWaitKey(30)>0)  // not cvWaitKey(0);break;   // any keys pushed down, exit the loop}cvReleaseCapture(&capture);// Don't  releaseImage(&frame)//cvReleaseImage(&gray);//cvReleaseImage(&canny_pic);}

注意几个小问题:

0, 注意gray 、 canny 通道数,8UC1 , 在没有得到图像大小前,不能设定图像大小,大或小都导致CV_BGR2GRAY 失败。

1, 读取视频文件路径: d:\\video\\case.mp4 中是' \ \ ' ,而非‘\ ' .   写错的后果,capture捕获视频失败,while(  false ),直接退出程序。

2, 视频格式。这个问题我说不准,之前用opencv2.1.0可以读取avi 视频,不能读mp4 ;

现在opencv2.4.4 能读取mp4, 不能读取 avi 。 可能是系统没有安装其他相关的视频编解码器的缘故吧。

当你视频路径没有问题,而程序一闪而过(不显示 " frame error!"),很可能就是opencv不支持当前的视频格式,可以转换其他格式试试。

3,假如碰到一种格式,while( capture)为真,而frame 得不到相应的帧图像,为了应对该情况,使用判断 if ( frame == NULL ) 决定是否结束程序。

4, 程序内的灰度图、边缘图指针的创建是在循环体内,最后就不用再循环体外释放了。

5,只能释放 capture, 不要释放 frame。 因为创建frame 的时候,没有创建相应的内存空间,只是个空的指针头,教材内有相关内容。

6,按任意键退出  if ( cvWaitKey(30) > 0 ) break; 没键按下,每帧图像显示30ms直到视频结束或按键按下。

这是简单的写法,也可以写作: char c = cvWaitKey(33);

 if ( c > 0 ) break ; // any key   pushed to exit

if( c == 27 ) break; // Esc pushed down to exit

原创粉丝点击