亚像素级的角点检测(程序)

#include <opencv2\opencv.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\highgui\highgui.hpp>

using namespace cv;
using namespace std;

Mat srcImg,grayImg;
int corner=30,cornerMax=600;

void on_Corner(int,void*)
{
if(corner<=1){
corner=1;
}
Mat copy=srcImg.clone();
vector corners;//对容器中每一个点的获取corners[i]
double qualityLevel=0.01;//角点检测可接受的最小特征值
double minDistance=10;//角点之间的最小距离
int blockSize=3;//计算导数自相关矩阵时指定的邻域范围
double k=0.04; //权重系数
goodFeaturesToTrack(grayImg,corners,corner,qualityLevel,minDistance,Mat(),blockSize,false,k);
for(int i=0;i<corners.size();i++)
{
printf(“角点检测[%d]到的坐标为(%f,%f)\n”,i,corners[i].x,corners[i].y);
}
//绘制每一个角点
//进行亚像素级角点检测的程序
Size winSize=Size(5,5);
Size zeroZone=Size(-1,-1);
TermCriteria criteria=TermCriteria(TermCriteria::EPS+TermCriteria::MAX_ITER,40,0.001);
cornerSubPix(grayImg,corners,winSize,zeroZone,criteria);
printf(“检测到的角点数量为%d”,corners.size());
for(int i=0;i<corners.size();i++)
{
circle(srcImg,corners[i],3,Scalar(0,255,0),2,8,0);
printf("\n精准角点坐标%d点的坐标为 %f,%f\n",i,corners[i].x,corners[i].y);
}
imshow(“角点检测”,srcImg);
}
int main()
{
srcImg=imread(“9.jpg”);
if(!srcImg.data)
{
printf(“载入图片出错,请检查图片的位置”);
return false;
}
cvtColor(srcImg,grayImg,COLOR_BGR2GRAY);
namedWindow(“角点检测”);
createTrackbar(“角点数量”,“角点检测”,&corner,cornerMax,on_Corner);
imshow(“角点检测”,srcImg);
on_Corner(0,0);
waitKey(0);
return 0;
}

猜你喜欢

转载自blog.csdn.net/nbxuwentao/article/details/86662755
今日推荐