OpenCV CUDA模块图像过滤------创建一个行方向的一维积分(Sum)滤波器函数createRowSumFilter()

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

算法描述

cv::cuda::createRowSumFilter 是 OpenCV CUDA 模块中的一个函数,用于创建一个行方向的一维积分(Sum)滤波器。这个滤波器通常用于加速图像处理任务,例如在计算图像的积分图(Integral Image)时非常有用。

函数原型

Ptr<Filter> cv::cuda::createRowSumFilter 	
(
 	int  	srcType,
	int  	dstType,
	int  	ksize,
	int  	anchor = -1,
	int  	borderMode = BORDER_DEFAULT,
	Scalar  	borderVal = Scalar::all(0) 
) 		

参数

参数名 类型 说明
srcType int 输入图像类型。目前仅支持 CV_8UC1 类型。
dstType int 输出图像类型。目前仅支持 CV_32FC1 类型。
ksize int 核的大小(即滤波器窗口的宽度)。
anchor int 锚点位置。默认值(-1)表示锚点位于核的中心。
borderMode int 像素外推方法(边界填充方式)。详细信息请参见 borderInterpolate
borderVal Scalar 默认的边界填充值。仅在使用 BORDER_CONSTANT 模式时有效,默认为 Scalar::all(0)

代码示例

#include 
#include 
#include 

int main()
{
    // 创建输入输出图像
    cv::Mat h_input = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", cv::IMREAD_GRAYSCALE );
    cv::cuda::GpuMat d_input, d_output;

    // 上传图像到 GPU
    d_input.upload( h_input );

    int ksize = 5;

    // 创建 Row Sum Filter
    cv::Ptr< cv::cuda::Filter > rowSumFilter = cv::cuda::createRowSumFilter( CV_8UC1,   // 输入类型
                                                                             CV_32FC1,  // 输出类型
                                                                             ksize      // 窗口宽度
    );

    // 应用滤波器
    rowSumFilter->apply( d_input, d_output );

    // 下载到 CPU
    cv::Mat h_output;
    d_output.download( h_output );

    // 手动归一化(可选:也可以只除以 ksize)
    h_output = h_output / ksize;                // 转换为平均值
    cv::convertScaleAbs( h_output, h_output );  // 转换回 uchar

    // 显示结果
    cv::imshow( "Original Image", h_input );
    cv::imshow( "Filtered Image", h_output );
    cv::waitKey( 0 );

    return 0;
}

运行结果

OpenCV CUDA模块图像过滤------创建一个行方向的一维积分(Sum)滤波器函数createRowSumFilter()_第1张图片

你可能感兴趣的:(OpenCV,人工智能,计算机视觉)