- 操作系統:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 編程語言:C++11
算法描述
該函數用于創建一個 Scharr 濾波器(基于 CUDA 加速),用于圖像的一階導數計算。它常用于邊緣檢測任務中,相比 Sobel 濾波器具有更高的方向精度和更小的誤差。
在 GPU 上使用此濾波器可顯著提升圖像處理速度,特別適合大規模圖像或實時視頻處理任務。
函數原型
Ptr<Filter> cv::cuda::createScharrFilter
(int srcType,int dstType,int dx,int dy,double scale = 1,int rowBorderMode = BORDER_DEFAULT,int columnBorderMode = -1
)
參數
參數名 | 類型 | 描述 |
---|---|---|
srcType | int | 輸入圖像類型。例如 CV_8UC1 , CV_32FC1 等。 |
dstType | int | 輸出圖像類型。通常使用浮點類型如 CV_32FC1 。 |
dx | int | x 方向上的導數階數,取值為 0 或 1。 |
dy | int | y 方向上的導數階數,取值為 0 或 1,且必須滿足 dx + dy == 1 。 |
scale | double | 可選比例因子,默認為 1。用于對濾波結果進行縮放。 |
rowBorderMode | int | 行方向濾波時使用的邊界填充方式。常用如 BORDER_DEFAULT 、BORDER_REPLICATE 等。 |
columnBorderMode | int | 列方向濾波時使用的邊界填充方式。默認值 -1 表示與 rowBorderMode 相同。 |
代碼示例
#include <opencv2/cudafilters.hpp>
#include <opencv2/cudaimgproc.hpp>
#include <opencv2/opencv.hpp>int main()
{// 讀取圖像并上傳到 GPUcv::Mat h_input = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", cv::IMREAD_GRAYSCALE );cv::cuda::GpuMat d_input, d_output;d_input.upload( h_input );// 創建 Scharr 濾波器(檢測 x 方向邊緣)auto scharrX = cv::cuda::createScharrFilter( CV_8UC1, CV_32FC1, 1, 0 );// 應用濾波器scharrX->apply( d_input, d_output );// 下載結果并顯示cv::Mat h_output;d_output.download( h_output );// 歸一化顯示cv::convertScaleAbs( h_output, h_output ); // 轉換回 uchar 類型cv::imshow( "Scharr X Output", h_output );cv::waitKey( 0 );return 0;
}