本文共 3217 字,大约阅读时间需要 10 分钟。
在学习 OpenCV 开发过程中,开发者常常会遇到滤波操作的困惑,不知道该使用哪种滤波方法。表面上看,OpenCV 提供了众多滤波函数,实则是对不同滤波方法应用场景的认知问题。以下将从应用场景和项目需求出发,分析常见的 OpenCV 滤波方法及其适用场景。
#include#include int main() { cv::Mat m1 = cv::imread("D:/640.jpg", 4); cv::Mat m2; cv::namedWindow("windows", CV_WINDOW_AUTOSIZE); cv::imshow("windows", m1); cv::blur(m1, m2, cv::Size(5,5), cv::Point(-1,-1), 4); cv::namedWindow("windows1", CV_WINDOW_AUTOSIZE); cv::imshow("windows1", m2); cv::waitKey(0); return 0;}
模糊函数主要用于去除图像噪声,常用于边缘提取和特征提取前的预处理。通过设置较小的卷积核(如 3x3),可以有效去除干扰和噪声。
#include#include int main() { cv::Mat m1 = cv::imread("D:/640.jpg", 4); cv::Mat m2; cv::namedWindow("windows", CV_WINDOW_AUTOSIZE); cv::imshow("windows", m1); cv::GaussianBlur(m1, m2, cv::Size(5,5), 0, 0); cv::namedWindow("windows1", CV_WINDOW_AUTOSIZE); cv::imshow("windows1", m2); cv::waitKey(0); return 0;}
高斯模糊常用于去除随机噪声,作为 Canny 边缘检测的第一步,能有效减少噪声干扰。
#include#include int main() { cv::Mat m1 = cv::imread("D:/640.jpg", 4); cv::Mat m2; cv::namedWindow("windows", CV_WINDOW_AUTOSIZE); cv::imshow("windows", m1); cv::medianBlur(m1, m2, 5); cv::namedWindow("windows1", CV_WINDOW_AUTOSIZE); cv::imshow("windows1", m2); cv::waitKey(0); return 0;}
中值滤波适用于去除椒盐噪声,通过取像素中值来平衡图像亮度,效果在去噪方面表现优异。
#include#include int main() { cv::Mat m1 = cv::imread("D:/640.jpg", 4); cv::Mat m2; cv::namedWindow("windows", CV_WINDOW_AUTOSIZE); cv::imshow("windows", m1); cv::bilateralFilter(m1, m2, 15, 120, 10, 4); cv::namedWindow("windows1", CV_WINDOW_AUTOSIZE); cv::imshow("windows1", m2); cv::waitKey(0); return 0;}
双边模糊常用于图像美化,特别是高斯磨皮算法中,通过平滑图像细节并保留边缘信息,效果显著。
#include#include int main() { cv::Mat m1 = cv::imread("D:/640.jpg", 4); cv::Mat m2; cv::namedWindow("windows", CV_WINDOW_AUTOSIZE); cv::imshow("windows", m1); int ksize = 15; cv::Mat kernel = cv::Mat_ (3, 3) << -1, -1, -1, -1, 8, -1, -1, -1, -1; cv::filter2D(m1, m2, -1, kernel, cv::Point(-1, -1), 0.0, 4); cv::namedWindow("windows1", CV_WINDOW_AUTOSIZE); cv::imshow("windows1", m2); cv::waitKey(0); return 0;}
filter2D 函数非常灵活,支持自定义卷积核,适用于模糊、锐化、边缘提取等多种操作。通过定义不同卷积核,可以实现多种滤波效果。
OpenCV 提供了五种主要的滤波函数,每种函数适用于不同的场景。掌握这些滤波方法及其应用场景,是 OpenCV 开发的关键能力。
转载地址:http://ersfk.baihongyu.com/