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

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

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;

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

qt5.8 + opencv3.2读取摄像头视频 -----初试_第1张图片


















你可能感兴趣的:(qt)