亚像素角点检测-cornerSubPix函数的使用

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
#include<vector>

Mat src = imread("D:\\VC\\c++\\opencv源码\\opencv源码\\3.png");//读入图像
Mat gray;
int thresh = 100;
RNG rng(12345);

//回调函数
void on_harris(int, void*)
{
	Mat src1;
	src1 = src.clone();
	vector<Point2f>corner;
	goodFeaturesToTrack(gray, corner, thresh, 0.01, 10, Mat(), 3, false, 0.04);
	cout << "检测到的角点数量为:" << corner.size() << endl;

	//以随机颜色绘制出角点
	for (int i = 0; i < corner.size(); i++)
	{
		circle(src1, corner[i], 4, Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)), 2, 8, 0);
	}
	imshow("【原始图像】", src1);

	//  调用cornerSubPix函数计算出亚像素角点的位置
	TermCriteria criteria = TermCriteria(TermCriteria::EPS + TermCriteria::MAX_ITER, 40, 0.001);
	cornerSubPix(gray, corner, Size(5, 5), Size(-1, -1), criteria);
	//输出角点信息
	for (int j = 0; j < corner.size(); j++)
	{
		//size () -(列,行);函数返回值是列*行
		cout << "精确角点坐标[" << j + 1 << "] (" << corner[j].x << "," << corner[j].y << ")" << endl;
	}
}

int main()
{
	gray = src.clone();
	cvtColor(gray, gray, COLOR_RGB2GRAY);
	namedWindow("【原始图像】", WINDOW_AUTOSIZE);
	createTrackbar("【最大角点数】", "【原始图像】", &thresh, 500, on_harris);
	on_harris(0, 0);
	waitKey(0);
	return 0;
}

 

 


版权声明:本文为qq_44771627原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。