前言介绍
在图像处理中,模糊(也称为平滑)和锐化是两种常见的图像滤波技术,它们可以用来改变图像的外观和质量。
在OpenCV中,模糊和锐化可以通过不同的滤波器来实现,如平均滤波、高斯滤波、拉普拉斯滤波等。根据具体的需求和应用场景,可以选择合适的滤波器来达到期望的效果。以下是一些具体方法。
1. 高斯模糊
Size越大模糊程度越大,原理不在介绍,直接看使用方法,一般都用高斯模糊,其他模糊方法可自寻探索
#include <iostream>
#include<opencv.hpp>
#include<opencv2\highgui\highgui.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat src = imread("src.jpg");
if (src.empty())
{
cout << "could not open file!";
cout << endl;
return -1;
}
imshow("src", src);
Mat dst;
//高斯模糊, sigm=0, 则通过Size计算
GaussianBlur(src, dst, Size(7, 7), 0);
imshow("dst", dst);
waitKey(0);
destroyAllWindows();
return 0;
}
2. 锐化
//锐化
//1.Blur
GaussianBlur(src, blur_imag, Size(3, 3), 0);
//2. 拉普拉斯梯度获取,获得图像中的高频信息
Laplacian(src, dst, -1, 1, 1.0, 0, BORDER_DEFAULT);
//3. 相加
Mat ums_image;
addWeighted(blur_imag, 1.0, dst, -0.7, 0, ums_image);
imshow("ums", ums_image);
3. 作用
1). 模糊(平滑):
- 模糊可以减少图像中的噪声和细节,使图像变得更加平滑和柔和。这对于一些图像处理任务如边缘检测、图像分割等是有益的。
- 模糊还可以模糊敏感信息,如人脸识别中对个人隐私的保护。
2). 锐化:
- 锐化可以增强图像中的细节和边缘,使图像看起来更清晰和更有立体感。这对于提高图像的视觉质量是有益的。
- 锐化还可以使图像中的特定目标更加突出,有助于目标检测和识别任务。
4. 其他方法
不做详细说明
除了常见的平均滤波、高斯滤波和拉普拉斯滤波外,OpenCV还提供了其他一些用于模糊和锐化的方法,以下是一些常用的方法:
-
中值滤波(Median Blur):
- 中值滤波是一种非线性滤波方法,它将像素的值替换为邻域内所有像素值的中值。这种方法对于去除椒盐噪声(Salt and Pepper Noise)非常有效。
- 中值滤波在图像处理中常用于去除噪声,并且可以保留图像的边缘信息。
-
双边滤波(Bilateral Filter):
- 双边滤波是一种结合了空间距离和像素值相似性的滤波方法,它可以在减少噪声的同时保持图像的边缘和细节信息。
- 双边滤波在图像处理中常用于平滑图像并保持图像的细节,适用于许多图像处理任务。
-
锐化滤波(Sharpening Filter):
- 锐化滤波是一种增强图像细节和边缘的滤波方法,它可以使图像看起来更加清晰和锐利。
- 锐化滤波通常通过增加像素与其周围像素之间的差值来实现,以突出图像中的细节。
这些方法在图像处理中都有各自的应用场景和优势,可以根据具体的需求选择合适的方法来实现图像模糊和锐化效果。在OpenCV中,这些滤波方法都可以通过相应的函数进行实现。
API 参数说明
cv::GaussianBlurc()
cv::GaussianBlur()
函数用于对图像进行高斯模糊处理,可以减少图像中的噪声并平滑图像。该函数的参数说明如下:
- 输入参数:
src
:输入图像,通常是一个cv::Mat
类型的多通道图像。dst
:输出图像,用于存储经过高斯模糊处理后的图像,通常是一个cv::Mat
类型的多通道图像。ksize
:高斯核的大小,通常是一个奇数的正整数,表示高斯核的宽和高。sigmaX
:X 方向的高斯核标准差。sigmaY
:Y 方向的高斯核标准差,如果为0,则默认与sigmaX
相同。
示例代码:
cv::Mat src = cv::imread("image.jpg");
cv::Mat dst;
cv::GaussianBlur(src, dst, cv::Size(5, 5), 0, 0);
在上面的示例中,src
是输入的图像,dst
是用于存储处理后的图像。调用cv::GaussianBlur()
函数对输入图像进行高斯模糊处理,使用5x5大小的高斯核,X 和 Y 方向的标准差均为0,最终结果存储在dst
中。
cv::Laplacian()
-
src
:输入图像,即要进行边缘检测的图像。通常为单通道灰度图像。 -
dst
:输出图像,即存储边缘检测结果的图像。通常为与输入图像相同尺寸和深度的图像。 -
ddepth
:输出图像的深度,即输出图像的数据类型。可以是以下几种选项之一:CV_16S
:16位有符号整数CV_32F
:32位浮点数CV_64F
:64位浮点数
-
ksize
:拉普拉斯算子的卷积核大小。可以是以下几种选项之一:1
:表示使用3x3的卷积核3
:表示使用5x5的卷积核5
:表示使用7x7的卷积核
-
scale
:可选参数,用于调节输出图像的缩放因子。默认值为1。 -
delta
:可选参数,用于调节输出图像的偏移值。默认值为0。 -
borderType
:可选参数,用于指定边界填充类型。默认值为BORDER_DEFAULT
,表示使用默认的边界填充方式。
通过调整这些参数,可以对输入图像进行不同尺寸和深度的拉普拉斯边缘检测操作,并根据需要调节输出图像的缩放因子、偏移值和边界填充方式。