概述
除了利用Harris进行角点检测和利用Shi-Tomasi方法进行角点检测外,还可以使用cornerEigenValsAndVecs()函数和cornerMinEigenVal()函数自定义角点检测函数。如果对角点的精度有更高的要求,可以用cornerSubPix()函数将角点定位到子像素,从而取得亚像素级别的角点检测效果。
cornerSubPix()函数
(1)函数原型
cornerSubPix()函数在角点检测中精确化角点位置,其函数原型如下:
C++: void cornerSubPix(InputArray image, InputOutputArray corners, Size winSize, Size zeroZone, TermCriteria criteria); C: void cvFindCornerSubPix(const CvArr* image, CvPoint2D32f* corners, int count, CvSize win, CvSize zero_zone, CvTermCriteria criteria);
(2)函数参数
函数参数说明如下:
image:输入图像
corners:输入角点的初始坐标以及精准化后的坐标用于输出。
winSize:搜索窗口边长的一半,例如如果winSize=Size(5,5),则一个大小为
的搜索窗口将被使用。
<??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+emVyb1pvbmWjusvRy/fH+NPy1tC85LXEZGVhZCByZWdpb26x37OktcTSu7Dro6zT0Mqx08PT2rHcw+LX1M/gudi+2NXztcTG5tLs0NSho8jnufsmIzIwNTQwO8nozqooLTEsLTEp1PKx7cq+w7vT0NXiuPbH+NPyoaM8YnI+CmNyaXRlcmlho7q9x7XjvqvXvLuvtfy0+rn9s8y1xNbV1rnM9bz+oaPSsr7Nyse1sbX8tPq0zsr9s6y5/WNyaXRlcmlhLm1heENvdW50o6y78tXfvce148671sOx5Luv0KHT2mNyaXRlcmlhLmVwc2lsb27KsaOszaPWubX8tPq5/bPMoaM8YnI+CjwvcD4KPHA+PC9wPgo8aDE+PHN0cm9uZz60+sLryr7A/Twvc3Ryb25nPjwvaDE+CjxwPjwvcD4KPHA+tPrC68q+wP27+dPaZ29vZEZlYXR1cmVzVG9UcmFjaygpvOyy4rP2wLS1xL3HteOjrMq508Njb3JuZXJTdWJQaXgoKbqvyv29q73HtePOu9bDvqvIt7W90cfP8cvYvLa+q7bIoaM8YnI+CjwvcD4KPHA+PHByZSBjbGFzcz0="brush:java;">/** * @使用cornerSubPix()函数在goodFeaturesToTrack()的角点检测基础上将角点位置精确到亚像素级别 * @author holybin */ #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include
实验结果:
