C++ openCV图像的卷积与滤波

图像的滤波

滤波与卷积区别:卷积中称卷积核,滤波中称滤波器。卷积需要将卷积核翻转180度在卷积,而滤波不需要;在opencv中或者深度学习卷积层中,由于卷积核通常对称,因此并未翻转。如果不对称,卷积需要手动翻转卷积核。

在不考虑卷积核翻转下,两者是一样的。
卷积的实现过程:
1) 将核的锚点(中心点)放在要计算像素上,卷积核剩余的部分对应在图像相应的像素上。
2) 用卷积核中的系数和图像中相应的像素值相乘,并求和。
3) 将最终结果赋值给锚点对应的像素。
4) 通过将核在整个图像滑动,重复以上计算过程直到处理完所有的像素。
链接: 卷积算子的实现

滤波器、卷积核的大小都是奇数,如 3 , 5 ,7,没有偶数大小的卷积核,无法选取合适的锚点,计算十分困难。

使用的命名空间

#pragma once
#include <opencv2\opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

均值滤波

在这里插入图片描述

src : 输入图像
dst : 输出图像,与输入相同尺寸、通道数
ksize : 均值模糊核的大小,通常3×3
anchor : 锚点,默认为核的中心
borderType : 图像外部的像素模式,一般不手动修改

测试代码:

//均值滤波
Mat m1 = imread(path3, 1);
Mat m2(m1.size(), m1.type());
//核大小为三,锚点为中心点
blur(m1, m2, Size(3,3) , Point(-1, -1));
namedWindow("truth image",WINDOW_FREERATIO);
namedWindow("blur image", WINDOW_FREERATIO);
//调整窗口大小
resizeWindow("truth image", 600, 400);
resizeWindow("blur image", 600, 400);
imshow("truth image", m1);
imshow("blur image", m2);
waitKey(0);

测试效果:(图像来源于网络,侵权请告知即删除)
在这里插入图片描述


高斯滤波

在这里插入图片描述

src : 输入图像
dst : 输出图像,与输入相同尺寸、通道数
kszie : 高斯核大小
sigmaX : X方向的高斯核标准偏差。
sigmaY :Y方向高斯核标准差;如果sigmaY为零,则设置为等于sigmaX;如果两个SIGMA都为零,则根据ksize计算。
borderType :使用默认值

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值