图像平滑处理:cv::filter2D()函数详解

cv::filter2D 函数可以对图像进行线性滤波。

函数可以对图像进行线性滤波。该函数使用指定的卷积核对输入图像进行卷积,以计算输出图像中每个像素的值。

该函数的原型如下:

void cv::filter2D(InputArray src, OutputArray dst, int ddepth, InputArray kernel, Point anchor = Point(-1,-1), double delta = 0, int borderType = BORDER_DEFAULT)

其中,src 参数表示输入图像,dst 参数表示输出图像,ddepth 参数表示输出图像的深度,kernel 参数表示卷积核,anchor 参数表示锚点,delta 参数表示在将结果存储到输出图像之前添加到每个像素的可选值,borderType 参数表示边界填充类型。每个参数具体的详细解析见下:

src:输入图像。
dst:输出图像,与输入图像大小和通道数相同。
ddepth:输出图像的深度,可以设置为 -1,表示与输入图像深度相同。
kernel:卷积核,用于对图像进行滤波。
anchor:锚点,表示卷积核中心的位置。默认值为 (-1,-1),表示卷积核中心位于卷积核的中心。
delta:在将结果存储到输出图像之前添加到每个像素的可选值。默认值为 0。
borderType:边界填充类型,用于指定如何处理边界像素。默认值为 cv::BORDER_DEFAULT。

参数ddepth表示的图像深度分别有:

CV_8U:8 位无符号整数。
CV_16U:16 位无符号整数。
CV_16S:16 位有符号整数。
CV_32F:32 位浮点数。
CV_64F:64 位浮点数。
此外,您还可以将 ddepth 参数设置为 -1,表示输出图像的深度与输入图像的深度相同。

参数borderType还有以下边界填充类型:

cv::BORDER_CONSTANT:使用常数填充边界。
cv::BORDER_REPLICATE:复制最后一个元素来填充边界。
cv::BORDER_REFLECT:在边界处反射图像内容来填充边界。
cv::BORDER_WRAP:在边界处环绕图像内容来填充边界。
cv::BORDER_REFLECT_101:与 cv::BORDER_REFLECT 类似,但在反射时不包括最后一个元素。
cv::BORDER_TRANSPARENT:忽略边界像素。
cv::BORDER_DEFAULT:默认值,等同于 cv::BORDER_REFLECT_101

下面是一个简单的示例,它展示了如何使用 cv::filter2D 函数对图像进行高斯模糊:

#include <opencv2/opencv.hpp>

int main() {
    cv::Mat src = cv::imread("image.jpg");  // 输入图片路径
    cv::Mat dst;
    cv::Mat kernel = (cv::Mat_<float>(3,3) << 1/16.0, 2/16.0, 1/16.0, 2/16.0, 4/16.0, 2/16.0, 1/16.0, 2/16.0, 1/16.0);
    cv::filter2D(src, dst, -1, kernel);
    cv::imshow("src", src);
    cv::imshow("dst", dst);
    cv::waitKey(0);
    return 0;
}

测试结果如下图所示:

在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

视觉研坊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值