小白学视觉,笔记,扩展
criteria迭代终止条件,常用迭代次数和优化结果精度结合使用,二者任意满足,终止;
#include#include #include using namespace cv; using namespace std; int main() { system("color F0"); //改变DOS界面颜色 Mat img = imread("lena.png", IMREAD_COLOR); if (!img.data) { cout << "读取图像错误,请确认图像文件是否正确" << endl; return -1; } //彩色图像转成灰度图像 Mat gray; cvtColor(img, gray, COLOR_BGR2GRAY); //提取角点 int maxCorners = 100; //检测角点数目 double quality_level = 0.01; //质量等级,或者说阈值与最佳角点的比例关系 double minDistance = 0.04; //两个角点之间的最小欧式距离 vector corners; goodFeaturesToTrack(gray, corners, maxCorners, quality_level, minDistance, Mat(), 3, false); //计算亚像素级别角点坐标 vector cornersSub = corners; //角点备份,防止被函数修改 Size winSize = Size(5, 5); Size zeroZone = Size(-1, -1);//没有死区,即全部提取 //TermCriteria(int type, int maxCount, double epsilon); TermCriteria criteria = TermCriteria(TermCriteria::EPS + TermCriteria::COUNT, 40, 0.001);//迭代终止条件 cornerSubPix(gray, cornersSub, winSize, zeroZone, criteria); //输出初始坐标和精细坐标 for (size_t i = 0; i < corners.size(); i++) { string str = to_string(i); str = "第" + str + "个角点初始坐标:"; cout << str << corners[i] << " 精细后坐标:" << cornersSub[i] << endl; } return 0; }



