OpenCV CUDA 模块图像过滤------创建一个高斯滤波器函数createGaussianFilter()

  • 操作系统: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;
}

运行结果

相关推荐
YangYang9YangYan2 分钟前
大专计算机技术专业就业方向:解读、规划与提升指南
大数据·人工智能·数据分析
mwq301233 分钟前
GPT监督微调SFT:在损失计算中屏蔽指令和填充 Token
人工智能
富唯智能11 分钟前
智慧物流新篇章:复合机器人重塑装配车间物料配送
人工智能·工业机器人·复合机器人
递归不收敛28 分钟前
四、高效注意力机制与模型架构
人工智能·笔记·自然语言处理·架构
TechNomad29 分钟前
十七、OpenCV中HighGUI模块的介绍和使用
opencv
扫地的小何尚32 分钟前
AI创新的火花:NVIDIA DGX Spark开箱与深度解析
大数据·人工智能·spark·llm·gpu·nvidia·dgx
AI科技星1 小时前
接近光速运动下的光速不变性:基于张祥前统一场论的推导与验证
数据结构·人工智能·经验分享·算法·计算机视觉
疯笔码良1 小时前
【IOS开发】SwiftUI + OpenCV实现图片的简单处理(一)
opencv·ios·swiftui
864记忆1 小时前
opencv图像预处理函数的功能与作用
人工智能·opencv·计算机视觉
m0_650108241 小时前
【论文精读】VITRON:统一的像素级视觉大语言模型
计算机视觉·论文精读·视觉理解·视觉生成·多模态通用模型·视觉分割·视觉编辑