OpenCV(二十四):可分离滤波

目录

1.可分离滤波的原理

2.可分离滤波函数sepFilter2D()

3.示例代码


1.可分离滤波的原理

可分离滤波的原理基于滤波器的可分离性。对于一个二维滤波器,如果它可以表示为水平方向和垂直方向两个一维滤波器的卷积,那么它就是可分离的。也就是说,一个二维滤波器可以通过两次一维卷积来实现,分别在水平和垂直方向进行滤波。

2.可分离滤波函数sepFilter2D()

void cv::sepFilter2D ( InputArray src,

OutputArray dst,

int ddepth,

InputArray kernelX,

InputArray kernelY,

Point anchor = point(-1,-1),

double delta =0 ,

int borderType = BORDER_DEFAULT

)

  • src:待滤波图像
  • dst:输出图像,与输入图像src具有相同的尺寸、通道数和数据类型
  • ddepth: 输出图像的数据类型(深度)。
  • kernelX:X方向的滤波器
  • kernelY:Y方向的滤波器
  • anchor:内核的基准点(锚点),其默认值为(-1,-1)代表内核基准点位于kernel的中心位置delta: 偏值,在计算结果中加上偏值。
  • borderType:像素外推法选择标志。

3.示例代码

展示如何使用可分离滤波在图像上应用高斯滤波:

复制代码
//可分离滤波
void  Separable_filtering(Mat image){
    // 定义滤波器大小和标准差
    int ksize = 3;
    double sigma = 1.0;

    // 获取水平方向和垂直方向的高斯滤波器
    cv::Mat kernelX = cv::getGaussianKernel(ksize, sigma);
    cv::Mat kernelY = cv::getGaussianKernel(ksize, sigma);

    // 计算水平方向和垂直方向上的一维滤波器
    cv::Mat kernelXY = kernelX * kernelY.t();

    // 执行可分离滤波
    cv::Mat result;
    cv::sepFilter2D(image, result, -1, kernelX, kernelY);
 
}

在上述示例中,cv::getGaussianKernel()函数用于获取高斯滤波器。ksize参数表示滤波器的大小,sigmaXsigmaY参数表示X和Y方向上的标准差。

通过将一维滤波器应用于图像的两个方向,并使用cv::sepFilter2D()函数将它们结合起来,我们可以实现高效的可分离滤波操作。

相关推荐
lrh1228003 分钟前
详解逻辑回归算法:分类任务核心原理、损失函数与评估方法
人工智能·分类·数据挖掘
阿猿收手吧!3 分钟前
【C++】constexpr动态内存与双模式革命
开发语言·c++
StarRocks_labs4 分钟前
不止于极速查询!StarRocks 2025 年度回顾:深耕 Lakehouse,加速 AI 融合
starrocks·人工智能·物化视图·lakehouse·湖仓架构
智驱力人工智能7 分钟前
景区节假日车流实时预警平台 从拥堵治理到体验升级的工程实践 车流量检测 城市路口车流量信号优化方案 学校周边车流量安全分析方案
人工智能·opencv·算法·安全·yolo·边缘计算
MicroTech202510 分钟前
微算法科技(NASDAQ :MLGO)抗量子攻击区块链共识机制:通过量子纠缠态优化节点验证流程,降低计算复杂度
科技·算法·区块链
pp起床11 分钟前
贪心算法 | part01
算法·贪心算法
梵刹古音11 分钟前
【C语言】 字符数组与多维数组
c语言·数据结构·算法
Sherlock Ma14 分钟前
强化学习入门(2):DQN、Reinforce、AC、PPO
人工智能·深度学习·机器学习·自然语言处理·transformer·dnn·强化学习
冰西瓜60014 分钟前
从项目入手机器学习(六)—— 深度学习尝试
人工智能·深度学习·机器学习
云深处@18 分钟前
【C++】哈希表
开发语言·c++