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

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

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

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

  1. #include <opencv2/opencv.hpp>  
  2. #include <iostream>  
  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. }


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值