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

看了半天的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;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值