本文共 1887 字,大约阅读时间需要 6 分钟。
在图像处理领域,模糊和滤波是常用的预处理技术,能够有效降低噪声,提升图像质量。本文将介绍 OpenCV 中常用的几种模糊方法,并通过代码实例展示其应用。
模糊是一种通过平滑过渡的方式降低图像的纹理细节的技术,常见的有简单模糊、高斯模糊、中值模糊和双边模糊等。这些模糊方法根据不同的滤核设计,分别适用于不同的应用场景。
高斯模糊是一种常用的模糊方法,其滤核是高斯函数 Gaussian 函数。通过调整滤核的尺寸和标准差,可以对图像进行不同程度的模糊处理。高斯模糊的特点是能够保留图像的关键细节,同时有效减少噪声。
以下是实现高斯模糊的 OpenCV 代码示例:
#include "opencv2/opencv.hpp"#include "iostream"#include "math.h"using namespace std;using namespace cv;int main() { Mat src = imread("E:\\vs2015\\opencvstudy\\1.jpg", 1); if (src.empty()) { cout << "could not load the src image!" << endl; return -1; } char input_title[] = "input Image"; imshow(input_title, src); // 高斯滤波 Mat dst_gaussian; GaussianBlur(src, dst_gaussian, Size(11, 11), 11, 11); imshow("gaussian Blur", dst_gaussian); waitKey(0); return 0;} 除了高斯模糊,还有其他几种模糊方法如简单模糊、中值模糊和双边模糊等。简单模糊使用 3x3 滤核,适用于轻微降噪;中值模糊通过中值滤波去除噪声;双边模糊则结合了模糊和边缘检测,效果更为理想。
双边模糊在图像处理中具有以下优势:
以下是双边模糊的 OpenCV 实现代码:
#include "opencv2/opencv.hpp"#include "iostream"#include "math.h"using namespace std;using namespace cv;int main() { Mat src = imread("E:\\vs2015\\opencvstudy\\1.jpg", 1); if (src.empty()) { cout << "could not load the src image!" << endl; return -1; } char input_title[] = "input Image"; imshow(input_title, src); // 双边滤波 Mat dst_bilateral; bilateralFilter(src, dst_bilateral, 15, 100, 5); imshow("bilateral Blur", dst_bilateral); // 使用 filter2D 实现高斯滤波效果 Mat dst_filter2D; Mat kernal = (Mat_ (3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); filter2D(dst_bilateral, dst_filter2D, -1, kernal, Point(-1, -1), 0); imshow("filter2D", dst_filter2D); waitKey(0); return 0;} 通过以上代码示例,可以看到 OpenCV 提供了丰富的模糊和滤波功能,用户可以根据具体需求选择合适的模糊方法。高斯模糊和双边模糊是常用的选择,能够有效降低噪声并保留图像细节。
转载地址:http://rmsfk.baihongyu.com/