课程: LEARN OPENCV C++ in 4 HOURS
YouTube: https://www.youtube.com/watch?v=2FYm3GOonhk
Bilibili: https://www.bilibili.com/video/BV11A411T7rL
环境: Opencv 4.6.0 + Visual Studio 2017
1. cvtColor() 颜色转换
1.1. 函数名
// 转换图片的颜色空间
void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );
注意:
OpenCV读取图像格式为 BGR , 而非常见的 RGB
code
为颜色空间的编码,可以在一个枚举变量ColorConversionCodes
中查到。
dstCn
为输出图像的通道数,默认值为0
,也就是默认和源图像保持一致。
1.2. 使用示例
int ImageToGrayScale(string path)
{
Mat img = imread(path); // 读取图像
Mat imgGray; // 目标图像
cvtColor(img, imgGray, COLOR_BGR2GRAY); // 转换原图为灰度图像, 储存至目标图像
imshow("Image", img); // 显示原图
imshow("Image_Gray", imgGray); // 显示目标图像
waitKey(0); // 任意键结束
return 0;
}
2. GaussiaBlur() 高斯模糊
2.1. 函数名
// 给图片添加高斯模糊的效果
void GaussianBlur( InputArray src, OutputArray dst, Size ksize,
double sigmaX, double sigmaY = 0,
int borderType = BORDER_DEFAULT );
一般用于边缘检测
ksize
该参数是Size
类型的,是一个OpenCV自定义的数据类型。用于指定图像或矩形大小的模板类。包含两个成员变量width
和height
。在该函数下,width
和height
只能是正奇数,数字越大模糊效果越明显。如果为0了,则该参数无效,使用sigmaX
和sigmaY
来决定模糊程度。
sigmaX
,sigmaY
分别为X
和Y
方向的高斯核标准差。如果sigmaY
为0
,它将被设置为和sigmaX
相等。这一对参数的作用同ksize
,使用这两个参数中的一种即可。
2.2. 使用示例
Mat ImageToBlur(string path)
{
Mat img = imread(path); // 读取图像
Mat imgBlur; // 目标图像
GaussianBlur(img, imgBlur, Size(5,5), 5, 0); // 高斯模糊,存至目标图像
imshow("Image", img); // 显示原图
imshow("Image_Blur", imgBlur); // 显示目标图像
waitKey(0); // 任意键结束
return imgBlur;
}
3. Canny() 边缘检测
3.1. 函数名
// 在输入图像中查找边缘,并使用 Canny 算法在输出图像边缘中标记它们
void Canny( InputArray image, OutputArray edges,
double threshold1, double threshold2,
int apertureSize = 3, bool L2gradient = false );
threshold1 threshold2 这是两个阈值,通过调节这两个阈值来调节边缘检测的效果。
后面两个参数,初学保持默认就可以。
3.2. 使用示例
Mat ImageToCanny(string path)
{
Mat imgBlur = ImageToBlur(path); // 先做图像模糊处理
Mat imgCanny;
Canny(imgBlur, imgCanny, 15, 35); // 边缘检测
imshow("Image_Canny", imgCanny); // 显示图像
waitKey(0); // 任意键结束
return imgCanny;
}
4. dilate() 图像扩大
4.1. 函数名
// 通过使用特定的结构元素来扩大图像
void dilate( InputArray src, OutputArray dst, InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue() );
// 获取特点结构
Mat kernel = getStructuringElement(MORPH_RECT, Size(3,3)); //Size中的数字越大,效果越明显
kernel 就是上面提到的特点的结构,它本身是 Mat 类型的。
4.2. 使用示例
Mat ImageToDilate(string path)
{
Mat imgCanny = ImageToCanny(path); // 先做图像模糊处理
Mat imgDil;
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3)); // 生成矩形内核,用于扩大
dilate(imgCanny, imgDil, kernel); // 扩大边缘
imshow("Image_Dilate", imgDil); // 显示图像
waitKey(0); // 任意键结束
return imgDil;
}
5. erode() 图像侵蚀
5.1. 函数名
//给图像添加侵蚀效果
void erode( InputArray src, OutputArray dst, InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue() );
5.2. 使用示例
Mat ImageToErode(string path)
{
Mat imgDil = ImageToDilate(path); // 先做图像边缘扩大处理
Mat imgErode;
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3)); // 生成矩形内核,用于侵蚀
erode(imgDil, imgErode, kernel); // 侵蚀边缘
imshow("Image_Erode", imgErode); // 显示图像
waitKey(0); // 任意键结束
return imgErode;
}
声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
挺着将军肚
本文地址: 4h上手OpenCV - 基本函数
本文地址: 4h上手OpenCV - 基本函数