opencv使用笔记本摄像头获取视频问题解决

xiaoxiao2021-02-28  96

看了半天的OpenCv3.0的书籍,也配置好环境,敲了几个简单的例子,第一次接触图像处理,感觉还是挺有趣味的。

简单的头文件包含 包含cv命名空间,Mat容器,imread();imshow();getStructuringElent() erode();等函数的使用。

当调试调用笔记本自带摄像头获取视频的时候,出现一个很奇怪的情况就是,程序执行一下,摄像头灯亮了一下又关掉了,程序也闪退了,或者出现一个错误。

断点调试发现没有问题 能够运行并且显示视频画面,

后灵机想一下 是不是 摄像头需要启动时间,没有断点的时候摄像头在获取数据的时候没获取成功,出错退出了。

代码如下:

#include <opencv2\opencv.hpp> using namespace cv; int main() { //读入视频 -- 如果传值为 0 则代表是从摄像头读入视频 VideoCapture capture("1.flv"); //这里是读取一段视频显示 //VideoCapture capture(0); //这里表示是显示摄像头数据 //循环显示每一帧 while (1) { Mat frame; //定义一个Mat变量,用于存储每一帧的图像 capture >> frame; //读取视频帧 imshow("读取视频帧", frame); //显示当前帧 waitKey(30); //延时30ms ???? } return 0; } 上面的这段程序如果是: VideoCapture capture(0);程序运行出错,或者程序闪退,我理解的原因是摄像头启动需要时间,所以在下面的这段程序中我在VideoCapture capture(0);之后_sleep(3000); 然后问题就解决了。就先这样理解吧,有大神看到了也可以给指点下,谢过!!! #include <opencv2\opencv.hpp> using namespace cv; int main() { //从摄像头读入视频 VideoCapture capture(0); _sleep(3000); Mat edges; //循环显示每一帧 while (1) { //读入图像 Mat frame; //定义一个Mat变量,用于存储每一帧的图像 capture >> frame; //读取当前帧 //将原图像转换为灰度图像 cvtColor(frame, edges, CV_BGR2GRAY); //转化BGR彩色图为灰度图 //使用3*3内核来降噪(2*3+1 = 7) blur(edges, edges, Size(7, 7)); //进行模糊 //进行Canny边缘检测并显示 Canny(edges, edges, 0, 30, 3); imshow("被Canny后的视频",edges); if(waitKey(30) >= 0) break; //延时30ms } return 0; }

转载请注明原文地址: https://www.6miu.com/read-70131.html

最新回复(0)