qt5.8 + opencv3.2读取摄像头视频 -----初试

来源:互联网 发布:淘宝网二手摄像头 编辑:程序博客网 时间:2024/05/21 15:09

简单的读取摄像头程序,摄像头为笔记本自带,过程中问题总结:

1.使用CvCapture 结构获取摄像头视频  cvQueryFrame(capture)-----读到数据为IplImage格式

  网上copy的代码 
cvNamedWindow( "Example2", CV_WINDOW_AUTOSIZE );//创建窗口,(名字,默认大小)  IplImage * frame = new IplImage;//申请IplImage类型指针,就是申请内存空间来存放每一帧图像  CvCapture *capture;// 视频获取结构, 用来作为视频获取函数的一个参数  //capture = cvCreateFileCapture("F:/qt pro/openCV/111.avi");//从avi格式文件获取视频流  capture = cvCreateCameraCapture(0);//打开摄像头,从摄像头中获取视频  while(1) {        frame = cvQueryFrame( capture );// 从摄像头中抓取并返回每一帧        if( !frame ) break;        cvShowImage( "Example2", frame );//在窗口上显示每一帧        char c = cvWaitKey(25);//延时,每秒钟约25帧;符合人眼观看速度;        if( c == 27 ) break;//由于是死循环,而且没有控制台,当按下键盘esc键,退出循环;            }  cvReleaseCapture( &capture );//释放内存;  cvDestroyWindow( "Example2" );//销毁窗口  return 0;
这样能够打开摄像头,但是不能够获取到数据,显示画面为黑,但是使用cvCreateFileCapture("F:/qt pro/openCV/111.avi")可以正常显示

具体原因未知,网络上有各种说法,有说与数据位数有关,需要转换,但是试了也不行。也有说是与vfw有关,win7下qt不能使用。试了多次始终没有成功抓狂

2.VideoCapture类获取摄像头视频------读到数据为mat格式

   网上copy的代码
       VideoCapture capture;//声明视频读入类       capture.open(0);//从摄像头读入视频 0表示从摄像头读入       if (!capture.isOpened())//先判断是否打开摄像头       {           cout<<"can not open";           cin.get();           return -1;       }       namedWindow(name);       while (1) {           Mat cap;//定义一个Mat变量,用于存储每一帧的图像           capture>>cap;//读取当前帧           if (!cap.empty())//判断当前帧是否捕捉成功 **这步很重要               imshow(name, cap);//若当前帧捕捉成功,显示           else               cout<<"can not ";           waitKey(30);//延时30毫秒       }       return 0;

这种方法可以读到视频并显示。再返回去试试上面的方法,结果还是失败。。。。。。



















原创粉丝点击