- 操作系统: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;
// 上传图像到 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;
}