在图像中搜索有价值的特征点时,使用角点是一种不错的方法。角点是很容易在图像中定位的局部特征,并且大量存在于人造物体中(例如墙壁、门、窗户、桌子等)。角点的价值在于它是两条边缘线的接合点,是一种二维特征,可以被精确地检测(即使是亚像素级精度)。与此相反的是位于均匀区域或物体轮廓上的点,这些点在同一物体的不同图像上很难重复精确定位。
Harris 特征检测是检测角点的经典方法,OpenCV 中检测 Harris 角点的基本函数是 cv::cornerHarris,它的使用方法非常简单。调用该函数时输入一幅图像,返回的结果是一个浮点数型图像,其中每个像素表示角点强度。然后对输出图像阈值化,以获得检测角点的集合。代码如下所示:
// 检测 Harris 角点
cv::Mat cornerStrength;
cv::cornerHarris(image, // 输入图像
cornerStrength, // 角点强度的图像
3, // 邻域尺寸
3, // 口径尺寸
0.01); // Harris 参数
// 对角点强度阈值化
cv::Mat harrisCorners;
double threshold= 0.0001;
cv::threshold(cornerStrength,harrisCorners,
threshold,255,cv::THRESH_BINARY);