#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版权协议,转载请附上原文出处链接和本声明。