- 操作系統:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 編程語言:C++11
算法描述
cv::cuda::createGaussianFilter 是 OpenCV CUDA 模塊中的一個工廠函數,用于創建一個高斯濾波器。這個濾波器可以用來平滑圖像,減少噪聲,并且在很多計算機視覺任務中作為預處理步驟非常有用。
函數原型
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)。 |
代碼示例
#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;}// 上傳到 GPUcv::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, // sigmaX1.5 // sigmaY);// 應用高斯濾波器gaussianFilter->apply( d_src, d_dst );// 下載結果回 CPUcv::Mat h_dst;d_dst.download( h_dst );// 顯示原始圖像及高斯模糊后的圖像cv::imshow( "Original", h_img );cv::imshow( "Gaussian Blurred", h_dst );cv::waitKey( 0 );return 0;
}