双目相机标定时左右目图片角点识别顺序错误问题的解决办法(c++)
一、问题描述:使用棋盘格对双目相机做相机标定,左目相机和右目相机拍摄的棋盘格在识别角点时,识别出的角点顺序不一致,造成了标定数据错误。(如下图)

二、解决方法:识别出双目的角点后,通过对比两张图片中第一个角点的位置关系来判断差异是否过大,如果过大则对角点顺序重新排序。
三、函数实现:
void ensureConsistentCornerOrder(Mat& image1, vector<Point2f>& corners1,Mat& image2, vector<Point2f>& corners2,Size boardSize) {// 检查第一个角点的位置关系Point2f firstCorner1 = corners1[0];Point2f firstCorner2 = corners2[0];// 如果第一个角点在图像中的位置差异太大,说明顺序可能相反double distance = norm(firstCorner1 - firstCorner2);double imageDiagonal = norm(Point2f(image1.cols, image1.rows));if (distance > imageDiagonal * 0.3) {// 反转其中一个角点序列reverse(corners2.begin(), corners2.end());cout << "检测到角点顺序不一致,已自动修正" << endl;}}