- 操作系统: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: 将图像上传到 GPU
cv::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;
}