- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
在OpenCV中,blur()函数用于对图像应用简单的均值模糊(mean blur)。这种模糊效果可以通过将图像中的每个像素替换为其邻域内所有像素的平均值来实现,从而达到平滑图像的目的。这对于去除图像中的噪声非常有用。
blur()函数使用归一化的盒形滤波器(normalized box filter)来平滑图像。这种滤波器对图像中的每个像素应用一个矩形核,大小为:
blur()函数的行为等同于调用boxFilter()函数.
函数原型
void cv::blur
(
InputArray src,
OutputArray dst,
Size ksize,
Point anchor = Point(-1,-1),
int borderType = BORDER_DEFAULT
)
参数
- 参数 src:输入图像;它可以有任意数量的通道,这些通道会被独立处理,但是图像的深度应该为CV_8U、CV_16U、CV_16S、CV_32F或CV_64F.
- 参数 dst :输出图像,其大小和类型与src相同。
- 参数 ksize:模糊核的大小.
- 参数 anchor:锚点位置;默认值Point(-1,-1)表示锚点位于核的中心。
- 参数 borderType: 用于推算图像外部像素的边界模式,详情请参阅BorderTypes。BORDER_WRAP模式不支持。
代码示例
#include <opencv2/opencv.hpp>
#include <iostream>
int main()
{
// 读取图像
cv::Mat src = cv::imread("/media/dingxin/data/study/OpenCV/sources/images/fruit_small.jpg");
if (!src.data)
{
std::cerr << "Error: Image cannot be loaded.\n";
return -1;
}
// 设置模糊参数
cv::Size ksize(15, 15); // 15x15的内核大小
cv::Mat dst;
// 应用均值模糊
cv::blur(src, dst, ksize);
// 显示原图和处理后的图像
cv::namedWindow("Original Image", cv::WINDOW_NORMAL);
cv::imshow("Original Image", src);
cv::namedWindow("Blurred Image", cv::WINDOW_NORMAL);
cv::imshow("Blurred Image", dst);
// 等待用户按键退出
cv::waitKey(0);
return 0;
}
运行结果
你可以修改代码中cv::Size ksize(15, 15); 中的内核大小,看看模糊的效果有什么差异,比如改成cv::Size ksize(5, 5);试试看。