序言:编写这些小程序有点跟写的意思,也是让新手提前适应OpenCV的基础用法。
一、图像显示
说明:用imread函数载入到新版本的图像存储数据结构Mat类(后期会详细介绍)中,然后用imshow函数显示即可。
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
//载入图片
Mat src = imread("D:\\12.jpg");
//显示图片
imshow("原始图", src);
waitKey(0);
}
二、图像腐蚀:腐蚀即用图像中的暗色部分“腐蚀”掉图像中的高亮部分。
说明:程序首先载入和显示一幅图像,然后定义一个Mat类型的变量来获取 getStructuringElement函数的返回值,这个函数发返回值指的是定性质和尺寸的结构元素。调用erode()函数进行图像腐蚀操作。
//进行腐蚀操作
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
Mat dstImage;
erode(src, dstImage, element);
imshow("效果图", dstImage);
三、图像模糊:对图像进行均值滤波操作,模糊一幅图像。
//进行均值滤波操作
Mat dstImage;
blur(src, dstImage, Size(7, 7));
imshow("均值滤波", dstImage);
四、canny边缘检测
说明:载入图像之后,将图像转化成灰度图,再用blur函数进行图像模糊以降噪,如何用canny函数进行边缘检测
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>//opencv highgui模块头文件
#include<opencv2/imgproc/imgproc.hpp>//图像处理头文件
using namespace cv;
int main()
{
//载入图片
Mat src = imread("D:\\12.jpg");
//显示图片
imshow("原始图", src);
Mat dstImage, edge, grayImage;//参数定义
//创建与src同类型和大小的矩阵
dstImage.create(src.size(), src.type());
//将原始图转化为灰度图
cvtColor(src, grayImage, COLOR_BGR2GRAY);
imshow("灰度图", grayImage);
//使用3x3内核来降噪
blur(grayImage, edge, Size(3, 3));
//运行Canny算子
Canny(edge, edge, 3, 9, 3);
//显示效果
imshow("边缘检测效果图", edge);
waitKey(0);
}
五、读取并播放视频
说明:通过对VideoCapture类的分享,可以发现利用它读入视频的方法一般有以下两种
(1)先实例化再初始化
VideoCapture capture;
capture.open("1.avi");
类似:int a; a=1;
(2)在实例化的同时进行初始化
VideoCapture capture("1.avi");
类似:int a=1;
当视频读入到VideoCapture类对象之后,紧接着可以用一个循环将每一帧显示出来
while(1)
{
//定义Mat变量,存储每一帧的图像
Mat frame;
//读取当前帧
capture>>frame;
//显示当前帧
imshow;
//延时30ms
waitKey(30);
}
程序源码:
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
//读入视频
VideoCapture capture("D:\\1.mp4");
//循环显示每一帧
while (1)
{
//定义Mat变量,存储每一帧的图像
Mat frame;
//读取当前帧
capture >> frame;
//显示当前帧
imshow("读取视频", frame);
//延时30ms
waitKey(30);
}
return 0;
}