一、opencv的安装
关于opencv的安装,本人在此就不再赘述了,网上相关教程很多,我个人比较推荐以下博主
链接:https://blog.csdn.net/qq_41175905/article/details/80560429
安装过程真的很详细(虽然我是看了其他博主的安装过程,但还是强烈推荐该博主),由于我用的是VS2017,部分同学可能采用VS2015或其他版本,但安装过程大同小异,只要细心安装,相信大家都可以快速的使用opencv。
二、图像处理基本函数
图像处理以前学过,但是学的是matlab,没有学opencv。由于日后的研究方向可能为图像处理方向,而opencv作为其中的主流,自然是必须要学习的。
1、图像的输入输出
代码如下
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgcodecs/imgcodecs.hpp>
//命名空间cv 表明以下特殊函数例如imread在cv空间中存在 避免cv::imread的繁琐书写
using namespace cv;
int main()
{
//Mat opencv中特殊的类 由两部分组成矩阵头和指针
//imread注意路径格式
Mat Image = imread("F:\\大四上\\opencv\\dome.jpg");
//imshow显示图片 参数一为图片名 参数二为要显示的图片变量
imshow("Original Image", Image);
//在imshow后若没有waitkey则不显示图片 参数为0代表无限等待 为1代表1ms
waitKey(0);
return 0;
}
输出如下
基本的输入输出imread、imshow与matlab并无区别,但命名空间cv与独特的变量类型Mat还是说明了VS与matlab的些许不同。
2、图像腐蚀
作为基本的形态学操作之一,腐蚀可以消除图像中的噪声点,采用不同的结构元素,可以滤除掉不同的噪声。
代码如下
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgcodecs/imgcodecs.hpp>
#include<opencv2/imgproc.hpp>
using namespace cv;
int main()
{
Mat Image = imread("F:\\大四上\\opencv\\Caitlyn.jpg");
imshow("Original Image", Image);
//生成结构元素 第一个参数为结构元素的类别 第二个参数为尺寸
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
Mat dstImage;
//腐蚀函数 三个参数依次为原图像 腐蚀图像 结构元素
erode(Image, dstImage, element);
imshow("Image Erosion", dstImage);
waitKey(0);
return 0;
}
输出如下
3、图像模糊
图像模糊,对图像采取不同的滤波手段以得到想要的信息。常用的滤波手段有,均值滤波,高斯滤波,中值滤波,双边滤波等,本示例采用中值滤波进行演示。
代码如下
#include<opencv2/opencv.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/imgcodecs.hpp>
#include<opencv2/imgproc.hpp>
using namespace cv;
int main()
{
Mat Image = imread("F:\\大四上\\opencv\\dome.jpg");
imshow("Origial Image", Image);
Mat dstImage;
//对原图像采用均值滤波后输出
blur(Image, dstImage, Size(7, 7));
imshow("Image Blurring", dstImage);
waitKey(0);
return 0;
}
输出如下
4、边缘检测
对图像进行滤波、边缘增强后,采用边缘检测算子可得到图像边缘。常用的一阶算子有Roberts Cross算子,Prewitt算子,Sobel算子,常用的二阶算子有Canny算子,Laplacian算子等。本示例采用Canny算子
代码如下
#include<opencv2/opencv.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/imgcodecs.hpp>
#include<opencv2/imgproc.hpp>
using namespace cv;
int main()
{
Mat Image = imread("F:\\大四上\\opencv\\dome.jpg");
imshow("Original Image", Image);
Mat dstImage, edge, grayImage;
//构造与Image大小相同 类型相同的变量dstImage
dstImage.create(Image.size(), Image.type());
//将Image变为灰度图像grayImage
cvtColor(Image, grayImage, COLOR_BGR2GRAY);
//对dstImage进行模糊处理
blur(Image, dstImage, Size(3, 3));
//参数一为输入图像,二为输出图像,三为阈值一,四为阈值二,五为算子大小
Canny(dstImage, edge, 3, 9, 3);
imshow("Canny Edge Deteection", edge);
waitKey(0);
return 0;
}