OpenCV学习记录之摄像头调用
关于opencv调用摄像头的问题主要是因为摄像头的打开有延时。在显示图像前,要用if语句判断图像是否存在。(否则会报错)
具体的:教程里的源程序,将if条件句里,break去掉,并增加else语句。
- #include<opencv2/opencv.hpp>
- #include<cv.h>
- using namespace cv;
- using namespace std;
- //-----------------------------------【main()函数】--------------------------------------------
- // 描述:控制台应用程序的入口函数,我们的程序从这里开始
- //-------------------------------------------------------------------------------------------------
- //stringname = "我的摄像头";
- int main( )
- {
- //【1】从摄像头读入视频
- VideoCapture capture(0);//若测试摄像头有没有打开,/*if(!capture.isOpened()) {cout<< "cannot open the camera.";cin.get();return -1;}*
- Mat edges; //定义一个Mat变量,用于存储每一帧的图像
- //【2】循环显示每一帧
- while(1)
- {
- Mat frame; //定义一个Mat变量,用于存储每一帧的图像
- capture >> frame; //读取当前帧
- if(frame.empty())
- {
- printf("--(!) No captured frame -- Break!");
- //break;
- }
- else
- {
- cvtColor(frame, edges, CV_BGR2GRAY);//彩色转换成灰度
- blur(edges, edges, Size(7, 7));//模糊化
- Canny(edges, edges, 0, 30, 3);//边缘化
- imshow("读取被边缘后的视频", frame); //显示当前帧
- }
- waitKey(30); //延时30ms
- }
- return0;
- }