OpenCV在笔记本上打不开摄像头的问题

条件:OpenCV2.4.13+win10 64位笔记本

正常条件下使用OpenCV3书中的例子并不能成功运行出来,利用摄像头读取视频。

下面为在网上找到的第一种办法,亲测可行;

  1. #include   
  2. #include   
  3. using namespace cv;  
  4. using namespace std;  
  5.   
  6. string name="我的";  
  7.   
  8. int main()  
  9. {  
  10.     VideoCapture capture; //声明视频读入类  
  11.     capture.open(0); //从摄像头读入视频 0表示从摄像头读入  
  12.   
  13.     if (!capture.isOpened()) //先判断是否打开摄像头  
  14.     {  
  15.         cout<<"can not open";  
  16.         cin.get();  
  17.         return -1;  
  18.     }  
  19.   
  20.     namedWindow(name);  
  21.   
  22.     while (1) {   
  23.         Mat cap; //定义一个Mat变量,用于存储每一帧的图像  
  24.         capture>>cap; //读取当前帧  
  25.         if (!cap.empty()) //判断当前帧是否捕捉成功 **这步很重要  
  26.             imshow(name, cap); //若当前帧捕捉成功,显示  
  27.         else  
  28.             cout<<"can not ";   
  29.         waitKey(30); //延时30毫秒  
  30.     }  
  31.   
  32.     return 0;  
  33. }  

但是第一帧并不能读出来,显示can not。原文链接为https://blog.csdn.net/u012005313/article/details/47451799

第二种方法:

  1. #include "cv.h"  
  2. #include "highgui.h"  
  3.   
  4. int main(int argc, char** argv) {  
  5.     cvNamedWindow("win");  
  6.   
  7.     CvCapture* capture = cvCreateCameraCapture(0);  
  8.     IplImage* frame = cvQueryFrame(capture);  
  9.   
  10.     while(1) {  
  11.         frame = cvQueryFrame(capture);  
  12.         if(!frame) break;  
  13.   
  14.         IplImage* out = cvCreateImage(cvGetSize(frame), frame->depth, 1);  
  15.         //cvCanny(frame, out, 100,100, 3);  
  16.   
  17.         cvShowImage("win", out);  
  18.   
  19.         cvReleaseImage(&out);  
  20.   
  21.         char c = cvWaitKey(50);  
  22.         if(c==27) break;  
  23.     }  
  24.   
  25.     cvReleaseCapture(&capture);  
  26.     cvDestroyWindow("win");  
  27.     return 0;  
  28. }

第三种方法:这种方法注销了一行代码,可以仔细看一下就知道了//if(!frame) break;

  1. #include "cv.h"  
  2. #include "highgui.h"  
  3.   
  4. int main(int argc, char** argv) {  
  5.     cvNamedWindow("win");  
  6.   
  7.     CvCapture* capture = cvCreateCameraCapture(0);  
  8.     IplImage* frame;  
  9.   
  10.     while(1) {  
  11.         frame = cvQueryFrame(capture);  
  12.         //if(!frame) break;  
  13.         cvShowImage("win", frame);  
  14.   
  15.         char c = cvWaitKey(50);  
  16.         if(c==27) break;  
  17.     }  
  18.   
  19.     cvReleaseCapture(&capture);  
  20.     cvDestroyWindow("win");  
  21.     return 0;  
  22. }


你可能感兴趣的:(OpenCV与视觉,计算机视觉)