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 <opencv2/cudafilters.hpp>
#include <opencv2/cudaimgproc.hpp>
#include <opencv2/opencv.hpp>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;// 上传图像到 GPUd_input.upload( h_input );int ksize = 5;// 创建 Row Sum Filtercv::Ptr< cv::cuda::Filter > rowSumFilter = cv::cuda::createRowSumFilter( CV_8UC1, // 输入类型CV_32FC1, // 输出类型ksize // 窗口宽度);// 应用滤波器rowSumFilter->apply( d_input, d_output );// 下载到 CPUcv::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;
}