OpenCV学习记录之摄像头调用

关于opencv调用摄像头的问题主要是因为摄像头的打开有延时。在显示图像前,要用if语句判断图像是否存在。(否则会报错)

具体的:教程里的源程序,将if条件句里,break去掉,并增加else语句。

[cpp]  view plain  copy
 
  1. #include<opencv2/opencv.hpp>   
  2. #include<cv.h>  
  3.    
  4. using namespace cv;   
  5. using namespace std;  
  6. //-----------------------------------【main()函数】--------------------------------------------  
  7. //                描述:控制台应用程序的入口函数,我们的程序从这里开始  
  8. //-------------------------------------------------------------------------------------------------  
  9. //stringname = "我的摄像头";  
  10. int main( )   
  11. {   
  12. //【1】从摄像头读入视频  
  13. VideoCapture capture(0);//若测试摄像头有没有打开,/*if(!capture.isOpened())                {cout<< "cannot open the camera.";cin.get();return -1;}*  
  14.    
  15. Mat edges; //定义一个Mat变量,用于存储每一帧的图像  
  16. //【2】循环显示每一帧  
  17. while(1)  
  18. {  
  19. Mat frame; //定义一个Mat变量,用于存储每一帧的图像  
  20. capture >> frame;  //读取当前帧                          
  21. if(frame.empty())  
  22. {  
  23. printf("--(!) No captured frame -- Break!");  
  24. //break;                  
  25. }  
  26. else  
  27. {  
  28. cvtColor(frame, edges, CV_BGR2GRAY);//彩色转换成灰度  
  29. blur(edges, edges, Size(7, 7));//模糊化  
  30. Canny(edges, edges, 0, 30, 3);//边缘化  
  31. imshow("读取被边缘后的视频", frame); //显示当前帧  
  32.    
  33. }  
  34.    
  35. waitKey(30); //延时30ms  
  36. }  
  37. return0;      
  38. }   

猜你喜欢

转载自www.cnblogs.com/wanghuaijun/p/9062023.html