OpenCV学习日记1


跟着毛星云的OpenCV入门一个个的敲代码。
第一天装环境花了太多时间,因此就看了第一章的内容。
主要是几个基本图像处理操作和VideoCapture类的简单使用。

基础操作

1、图像显示

Mat src = imread("0.jpg");		//f图片放在项目根目录下,否则需填写绝对目录:"E://图片//2.jpg"
imshow("原图:腐蚀操作", src);		//第一个变量为窗口的名字

2、腐蚀操作

Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));	//getStructuringElement函数的返回值为指定形状和
Mat dstImage;								//尺寸的结构元素(内核矩阵)
erode(src, dstImage, element);
imshow("效果图:腐蚀操作", dstImage);

OpenCV学习日记1

3、图像模糊

imshow("均值滤波 原图", src);
Mat dest;
blur(src, dest, Size(7, 7));
imshow("均值滤波 效果图", dest);

OpenCV学习日记1

4、canny边缘检测

	imshow("Canny边缘检测 原始图", src);
	Mat dst, edge, grayImg;		//参数定义	
	dst.create(src.size(), src.type());		//创建于src同样大小的矩阵dst
	cvtColor(src, grayImg, COLOR_BGR2GRAY);		//将图像转换为灰度图像
	blur(grayImg, edge, Size(3, 3));		//先使用 3x3 内核来降噪
	Canny(edge, edge, 3, 9, 3);			//运行Canny算子
	imshow("Canny边缘检测 效果图", edge);

OpenCV学习日记1

VideoCapture类

1.读入视频的方法一般有以下两种:

1)先实例化再初始化

VideoCapture capture;
capture.open("1.avi");

2)在实例化的同时进行初始化

VideoCapture capture("1.avi");
//视频读入到 VideoCapture类对象后,紧接着可以用一个循环将每一帧显示出来:
VideoCapture capture("1.mp4");
//使用循环将每一帧显示出来:
while (1) {
	Mat frame;		//定义一个Mat对象,用于存储每一帧的图像
	capture >> frame;		//读取当前帧
	imshow("读取视频", frame);
	waitKey(1);		//延时30ms
}

2.调用摄像头采集图像

只需将 VideoCapture capture(“1.avi”); 中的 1.avi 改为 0 就好了,表示调用摄像头而不是从文件中读取另外,还可以用摄像头来配合 canny 边缘检测,得到 canny 边缘检测并高斯模糊后的摄像头采集视频:

VideoCapture capture(0);
	Mat edges;
	//使用循环将每一帧显示出来:
	while (1) {
		Mat frame;		//定义一个Mat对象,用于存储每一帧的图像
		capture >> frame;		//读取当前帧
		cvtColor(frame, edges, COLOR_BGR2GRAY);		//转换为BGR色彩图为灰度图
		blur(edges, edges, Size(7, 7));		//使用 3x3 内核来降噪(2x3+1 = 7),进行模糊
		Canny(edges, edges, 0, 30, 3);
		imshow("被Canny后的视频", edges);
		if (waitKey(30) >= 0) {
			break;
		}	//延时30ms
	}

OpenCV学习日记1