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);
3、图像模糊
imshow("均值滤波 原图", src);
Mat dest;
blur(src, dest, Size(7, 7));
imshow("均值滤波 效果图", dest);
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);
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
}