opencv:3x3均值滤波器(平均滤波器)、3x3卷积核

// 创建结果图像,复制源图像
Mat result = src.clone();

// 遍历图像的每个像素(除了边缘)
for (int row = 1; row < h-1; row++) {
    for (int col = 1; col < w-1; col++) {
        // 对蓝色通道应用3x3均值滤波
        int sb = src.at<Vec3b>(row, col)[0] + src.at<Vec3b>(row - 1, col - 1)[0] + src.at<Vec3b>(row - 1, col)[0] +
            src.at<Vec3b>(row - 1, col + 1)[0] + src.at<Vec3b>(row, col - 1)[0] + src.at<Vec3b>(row, col + 1)[0] +
            src.at<Vec3b>(row + 1, col - 1)[0] + src.at<Vec3b>(row+1, col)[0] + src.at<Vec3b>(row+1, col + 1)[0];

        // 对绿色通道应用3x3均值滤波
        int sg = src.at<Vec3b>(row, col)[1] + src.at<Vec3b>(row - 1, col - 1)[1] + src.at<Vec3b>(row - 1, col)[1] +
            src.at<Vec3b>(row - 1, col + 1)[1] + src.at<Vec3b>(row, col - 1)[1] + src.at<Vec3b>(row, col + 1)[1] +
            src.at<Vec3b>(row + 1, col - 1)[1] + src.at<Vec3b>(row + 1, col)[1] + src.at<Vec3b>(row + 1, col + 1)[1];

        // 对红色通道应用3x3均值滤波
        int sr = src.at<Vec3b>(row, col)[2] + src.at<Vec3b>(row - 1, col - 1)[2] + src.at<Vec3b>(row - 1, col)[2] +
            src.at<Vec3b>(row - 1, col + 1)[2] + src.at<Vec3b>(row, col - 1)[2] + src.at<Vec3b>(row, col + 1)[2] +
            src.at<Vec3b>(row + 1, col - 1)[2] + src.at<Vec3b>(row + 1, col)[2] + src.at<Vec3b>(row + 1, col + 1)[2];

        // 计算平均值并存储到结果图像中
        result.at<Vec3b>(row, col)[0] = sb / 9;
        result.at<Vec3b>(row, col)[1] = sg / 9;
        result.at<Vec3b>(row, col)[2] = sr / 9;
    }
}

这段代码的主要功能是:

1.对图像应用3x3的均值滤波器,这是一种简单的图像平滑技术。

2. 分别处理图像的蓝色(B)、绿色(G)和红色(R)三个通道。

3.对于每个像素,计算其周围3x3邻域内所有像素值的和(对每个颜色通道单独计算)。

4.将和除以9(3x3=9个像素)得到平均值,作为结果图像中对应像素的新值。

5. 这个过程会略微模糊图像,可以用来减少噪声或者平滑图像。

注意事项:

  • 这段代码没有处理图像边缘(第一行、最后一行、第一列、最后一列),因为这些像素没有完整的3x3邻域。
  • 使用src.clone()创建result确保了原图像不会被修改。
  • 这种直接实现的方法在计算效率上不如使用OpenCV的内置函数(如blur()或boxFilter()),但它清楚地展示了均值滤波的原理。
  • 对于大图像,这种逐像素的处理可能会比较慢。在实际应用中,通常会使用更优化的方法或利用OpenCV的内置函数。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值