哈里斯角点检测
克里斯·哈里斯(Chris Harris)和迈克·史蒂芬斯(Mike Stephens)在1988年的论文《组合式拐角和边缘检测器》(《A Combined Corner and Edge
Detector》)中做了一次找到这些拐角的尝试,所以现在将其称为哈里斯拐角检测器。这篇论文把这个简单的想法变成了数学形式。它基本上找到了在所有方向上位移的强度差异。
官方api解释直达
1
|
cornerHarris(src, dst, blockSize, ksize, k)
|
src
:必须是单通道灰度图
dst
:返回类型是CV_32FC1
,大小与 src
相同。
blockSize
:角点检测考虑的领域大小,int类型
kszie
:Sobel算子的大小,int类型
k
:自由度参数,值越小检测出的结果越多。double类型
1 2 3 4 5 6 7 8 9 10 11 12 13
|
Mat gray, points; cvtColor(src, gray, COLOR_BGR2GRAY); cornerHarris(gray, points, 2, 3, 0.04); double points_max; src.copyTo(dst); minMaxLoc(points, nullptr, &points_max); for (int i = 0; i < dst.size().height; i++) { for (int j = 0; j < dst.size().width; j++) { if (points.at<float>(i, j) > 0.01 * points_max) { dst.at<Vec3b>(i, j) = {0, 0, 255}; } } }
|

史-托马斯角点检测
J. Shi 和 C. Tomasi 在其论文 《Good Features to Track》 中对其进行了小的修改,与Harris Corner
Detector相比,该方法表现出出更好的结果。
官方api解释直达
1
|
goodFeaturesToTrack(src, corners, maxCorners, qualityLevel, minDistance)
|
src
:8位单通道或者32位浮点单通道图像
corners
:检测到的角的点集,类型为vector<Point>
maxCorners
:最大角数
qualityLevel
:最低接收的质量百分比
minDistance
:点之间的最小距离
1 2 3 4 5 6 7 8
|
Mat gray; vector<Point> points; src.copyTo(dst); cvtColor(src, gray, COLOR_BGR2GRAY); goodFeaturesToTrack(gray, points, 25, 0.01, 10); for (int i = 0; i < points.size(); i++) { circle(dst, points[i], 3, {0, 0, 255}, -1); }
|

完整代码:https://github.com/AskeyNil/BlogCode/blob/master/OpenCV/cc/CornerDetector.cc