Opencv调用摄像头显示原始视频并做灰度转换、高斯滤波、canny边缘检测

一、原理

灰度变换:

灰度变换是指根据某种目标条件按一定变换关系逐点改变源图像中每一个像素灰度值的方法。目的是为了改善画质,使图像的显示效果更加清晰。 图像的灰度变换处理是图像增强处理技术中的一种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的一个重要组成部分。

高斯滤波

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

Canny边缘检测

Canny 算法使用 4 个 mask 检测水平、垂直以及对角线方向的边缘。原始图像与每个 mask 所作的卷积都存储起来。对于每个点我们都标识在这个点上的最大值以及生成的边缘的方向。


二、编码过程

1、调用摄像头

Mat frame;
VideoCapture capture(0);

2、视频保存

VideoWriter writer("D:\\VideoTest.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25.0, Size(640, 480));

3、灰度转换、高斯滤波、canny边缘检测

while (waitKey(30) != 27)
	{
		cap >> frame;
		imshow("原图", frame);
		cvtColor(frame, frame, CV_BGR2GRAY);//转化为灰度图  
		imshow("去色", frame);
		GaussianBlur(frame, frame, Size(7, 7), 1.5, 1.5);//高斯滤波  
		imshow("高斯滤波", frame);
		Canny(frame, frame, 60, 100);//Canny算子检测边缘,两个参数随便调  
		imshow("Canny边缘", frame);

	}

4、结果显示


5、源代码

#include <opencv2\opencv.hpp>  

using namespace cv;
int main()
{
	//实时显示摄像头
	Mat frame;
	//读取视频或摄像头
	VideoCapture cap(0);
	//视频保存
	VideoWriter writer("D:\\VideoTest.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25.0, Size(640, 480));

	//显示视频文件
	//string filename = "D.avi";//打开的视频文件
	//VideoCapture capture;
	//capture.open(filename);
	//VideoWriter writer("VideoTest.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25.0, Size(640, 480));//保存视频*/

	double rate = cap.get(CV_CAP_PROP_FPS);//获取视频文件的帧率  
	int delay = cvRound(1000.000 / rate);
	while (waitKey(30) != 27)
	{
		cap >> frame;
		imshow("原图", frame);
		cvtColor(frame, frame, CV_BGR2GRAY);//转化为灰度图  
		imshow("去色", frame);
		GaussianBlur(frame, frame, Size(7, 7), 1.5, 1.5);//高斯滤波  
		imshow("高斯滤波", frame);
		Canny(frame, frame, 60, 100);//Canny算子检测边缘,两个参数随便调  
		imshow("Canny边缘", frame);

	}
}

猜你喜欢

转载自blog.csdn.net/myclass1312/article/details/80762196