OpenCV图像滤波(16)应用分离式滤波器函数sepFilter2D()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

对图像应用分离式线性滤波器。

该函数对图像应用分离式线性滤波器。首先,src 的每一行都用 1D 内核 kernelX 进行滤波。然后,结果的每一列都用 1D 内核 kernelY 进行滤波。最终结果加上 delta 后存储在 dst 中。

sepFilter2D() 函数是 OpenCV 中用于应用分离式滤波器的一种高效方法。这种滤波器可以将二维卷积分解为两个一维卷积操作,从而显著减少计算量。

函数原型

cpp 复制代码
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 输出图像;与输入图像具有相同的大小和通道数。
  • 参数ddepth 输出图像深度,参见 combinations
  • 参数kernelX 用于过滤每一行的系数矩阵。
  • 参数kernelY 用于过滤每一列的系数矩阵。
  • 参数anchor 内核中的锚点位置。默认值 (-1, -1) 表示锚点位于内核中心。
  • 参数delta 在存储结果之前添加到过滤结果的值。
  • 参数borderType 像素外推方法,参见 BorderTypes。BORDER_WRAP 不支持。

代码示例

cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>

int main()
{
    // 加载图像
    cv::Mat img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/erik.jpg", cv::IMREAD_GRAYSCALE );

    if ( img.empty() )
    {
        std::cout << "无法加载图像,请检查路径是否正确。" << std::endl;
        return -1;
    }

    cv::Size sz2Sh( 400, 600 );
    cv::resize( img, img, sz2Sh, 0, 0, cv::INTER_LINEAR_EXACT );

    // 定义滤波器核
    cv::Mat kernelX = ( cv::Mat_< float >( 1, 3 ) << 1, 0, -1 );
    cv::Mat kernelY = ( cv::Mat_< float >( 3, 1 ) << 1, 2, 1 );

    // 应用分离式线性滤波器
    cv::Mat dst;
    cv::sepFilter2D( img, dst, CV_32F, kernelX, kernelY );

    // 转换为绝对值
    cv::Mat abs_dst;
    cv::convertScaleAbs( dst, abs_dst );

    // 显示结果
    cv::namedWindow( "Original Image", cv::WINDOW_NORMAL );
    cv::imshow( "Original Image", img );

    cv::namedWindow( "Filtered Image", cv::WINDOW_NORMAL );
    cv::imshow( "Filtered Image", abs_dst );

    cv::waitKey( 0 );  // 等待按键

    return 0;
}

运行结果

相关推荐
九亿AI算法优化工作室&5 分钟前
DBO优化GRNN回归预测matlab
人工智能·python·算法·matlab·数据挖掘·回归·机器人
KuaFuAI20 分钟前
百度“秒哒”能开始内测了?李彦宏:假!
人工智能·百度·aigc·码上飞·ai产品榜·一句话生成一个应用
Jackilina_Stone23 分钟前
【python】三帧差法实现运动目标检测
python·计算机视觉·od·运动目标检测
羑悻的小杀马特24 分钟前
计算机视觉:撕裂时空的视觉算法革命狂潮
人工智能·算法·计算机视觉
l1m0_25 分钟前
什么是波士顿矩阵,怎么制作?AI工具一键生成战略分析图!
人工智能·ai·信息可视化·矩阵·aigc·波士顿矩阵
Icomi_27 分钟前
【PyTorch】3.张量类型转换
c语言·c++·人工智能·pytorch·python·深度学习·神经网络
GISer Liu1 小时前
深入理解Transformer中的解码器原理(Decoder)与掩码机制
开发语言·人工智能·python·深度学习·机器学习·llm·transformer
金融OG1 小时前
6. 马科维茨资产组合模型+政策意图AI金融智能体(DeepSeek-V3)增强方案(理论+Python实战)
大数据·人工智能·python·算法·机器学习·数学建模·金融
PaLu-LI1 小时前
ORB-SLAM2源码学习:Initializer.cc(11): Initializer::ReconstructH用H矩阵恢复R, t和三维点
c++·人工智能·学习·ubuntu·计算机视觉·矩阵
发呆小天才O.oᯅ1 小时前
自然语言处理——从原理、经典模型到应用
人工智能·深度学习·自然语言处理·transformer