- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
cv::cuda::createGaussianFilter 是 OpenCV CUDA 模块中的一个工厂函数,用于创建一个高斯滤波器。这个滤波器可以用来平滑图像,减少噪声,并且在很多计算机视觉任务中作为预处理步骤非常有用。
函数原型
cpp
cv::Ptr<cv::cuda::Filter> cv::cuda::createGaussianFilter
(
int srcType,
int dstType,
cv::Size ksize,
double sigma1,
double sigma2 = 0,
int rowBorderMode = cv::BORDER_DEFAULT,
int columnBorderMode = -1
);
参数
参数名 | 类型 | 描述 |
---|---|---|
srcType | int | 输入图像类型,例如 CV_8UC1, CV_32FC1 等。 |
dstType | int | 输出图像类型,通常与输入类型相同或根据需求指定。 |
ksize | cv::Size | 高斯核大小(宽度和高度),必须为正奇数。如果设置为 (0, 0),则根据 sigma1 和 sigma2 自动计算。 |
sigma1 | double | x方向的标准差。 |
sigma2 | double | y方向的标准差。如果设为 0,则与 sigma1 相同。 |
rowBorderMode | int | 行方向上的边界填充模式,默认为 cv::BORDER_DEFAULT。 |
columnBorderMode | int | 列方向上的边界填充模式,默认使用 rowBorderMode 的值(即 -1)。 |
代码示例
cpp
#include <opencv2/cudafilters.hpp>
#include <opencv2/cudaimgproc.hpp>
#include <opencv2/opencv.hpp>
int main()
{
// 读取灰度图像
cv::Mat h_img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", cv::IMREAD_GRAYSCALE );
if ( h_img.empty() )
{
std::cerr << "Error: Image not found!" << std::endl;
return -1;
}
// 上传到 GPU
cv::cuda::GpuMat d_src, d_dst;
d_src.upload( h_img );
// 创建高斯滤波器(ksize=5x5, sigmaX=1.5)
cv::Ptr< cv::cuda::Filter > gaussianFilter = cv::cuda::createGaussianFilter( d_src.type(), // 输入类型(CV_8UC1)
d_src.type(), // 输出类型与输入相同
cv::Size( 5, 5 ), // 核大小
1.5, // sigmaX
1.5 // sigmaY
);
// 应用高斯滤波器
gaussianFilter->apply( d_src, d_dst );
// 下载结果回 CPU
cv::Mat h_dst;
d_dst.download( h_dst );
// 显示原始图像及高斯模糊后的图像
cv::imshow( "Original", h_img );
cv::imshow( "Gaussian Blurred", h_dst );
cv::waitKey( 0 );
return 0;
}
运行结果
