在前面一篇教程中,我们通过取局部最大值的方法来处理检测结果,但是从图像中可以看到harris角的分布并不均匀,在纹理颜色比较深的地方检测的harris角结果更密集一些。本章中,我们使用一个简单的策略算法,首先在检测的harris角图像中,找到一个值最大的角,后面的最大值角检测至少要和前面的角有一个距离,这样循环查找角,直到得到指定数目的角位置。
在OpenCV中,我们可以通过下面的代码得到结果:
// Compute good features
to track
std::vector<cv::Point2f> corners;
cv::goodFeaturesToTrack(image,corners,
500, // maximum number of corners to be returned
0.01, // quality level
10); // minimum allowed distance
between points
500是我们需要的harris角数目,0.01是quality level,用作二值化harris角图像,10是两个harris之间的距离。检测结果放在corners中,我们可以在原图像中,显示这些角,可以看到这些角的分布要均匀很多。
我们也可以使用下面的代码得到相同的结果:
// vector of
keypoints
std::vector<cv::KeyPoint> keypoints;
// Construction of the Good Feature to Track
detector
cv::GoodFeaturesToTrackDetector gftt(
500, // maximum number
of corners to be returned
0.01,
// quality level
10); // minimum allowed distance between
points
// point detection using FeatureDetector
method
gftt.detect(image,keypoints);
cv::drawKeypoints(image,
// original image
keypoints,
// vector of keypoints
image,
// the resulting image
cv::Scalar(255,255,255), // color of the
points
cv::DrawMatchesFlags::DRAW_OVER_OUTIMG); //drawing
flag
原文:http://www.cnblogs.com/mikewolf2002/p/3547438.html