前言:
本文解决问题:
1、在相机标定,也就是图像矫正过程中,参考点的选取;
2、根据选择出的点,如何计算变换矩阵,两种,调用库函数和解方程的方法
一、角点检测
cv::goodFeaturesToTrack() 检测整个图像内的角点 本例子里面无法使用。
参考:https://blog.csdn.net/guduruyu/article/details/69537083
运行后的结果如图所示:
使用findChessboardCorners() 自动寻找板内的角点
//! finds checkerboard pattern of the specified size in the image
CV_EXPORTS_W bool findChessboardCorners(
InputArray image, Size patternSize,
OutputArray corners,
int flags=CALIB_CB_ADAPTIVE_THRESH+CALIB_CB_NORMALIZE_IMAGE );
第一个参数Image,传入拍摄的棋盘图Mat图像,必须是8位的灰度或者彩色图像;
第二个参数patternSize,每个棋盘图上内角点的行列数,一般情况下,行列数不要相同,便于后续标定程序识别标定板的方向;
第三个参数corners,用于存储检测到的内角点图像坐标位置,一般用元素是Point2f的向量来表示:vector<Point2f> image_points_buf;
第四个参数flage:用于定义棋盘图上内角点查找的不同处理方式,有默认值。
用这个函数检测,运行后结果如图:
二、根据两幅图像找到对应点
做法同上一步,对两幅图像进行同样的操作,之后可以得到两幅图中一一对应的点,这样坐标就找到了,然后就可以进行H阵的计算。只需要在corners中取相应位置的点即可。如图,取绿色的四个点,然后依据这四个点进行计算。
对两幅图处理,结果如图: