- 操作系統:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 編程語言:C++11
算法描述
該函數創建一個 基于 Harris 算法的角點響應計算對象,專門用于在 GPU 上進行高效計算。
它返回的是一個 cv::Ptrcv::cuda::CornernessCriteria 類型的對象,可用于后續調用 .compute() 方法對圖像進行角點響應值計算。
函數原型
Ptr<CornernessCriteria> cv::cuda::createHarrisCorner
(int srcType,int blockSize,int ksize,double k,int borderType = BORDER_REFLECT101
)
參數
-
srcType 輸入源類型。目前僅支持 CV_8UC1 和 CV_32FC1。
-
blockSize 鄰域大小。
-
ksize Sobel 算子的孔徑參數(用于計算梯度)。
-
k Harris 檢測器的自由參數。
-
borderType 像素外推方法(邊界填充方式)。目前僅支持 BORDER_REFLECT101 和 BORDER_REPLICATE。
代碼示例
#include <opencv2/opencv.hpp>
#include <opencv2/cudaimgproc.hpp>
#include <iostream>int main() {// Step 1: 加載灰度圖cv::Mat h_img = cv::imread("/media/dingxin/data/study/OpenCV/sources/images/chessboard.png", cv::IMREAD_GRAYSCALE);if (h_img.empty()) {std::cerr << "Failed to load image!" << std::endl;return -1;}// Step 2: 將圖像上傳到 GPUcv::cuda::GpuMat d_img, d_corners;d_img.upload(h_img);// Step 3: 創建 Harris 角點檢測器int srcType = d_img.type();int blockSize = 3;int ksize = 3;double k = 0.04;cv::Ptr<cv::cuda::CornernessCriteria> criteria = cv::cuda::createHarrisCorner(srcType, blockSize, ksize, k);// Step 4: 執行角點響應計算criteria->compute(d_img, d_corners);// Step 5: 下載結果并顯示cv::Mat h_corners;d_corners.download(h_corners);cv::normalize(h_corners, h_corners, 0, 255, cv::NORM_MINMAX, CV_8U);cv::imshow("original picture", h_img);cv::imshow("Harris Corner Response", h_corners);cv::waitKey(0);return 0;
}