OpenCV 4.10.0
开源计算机视觉
|
上一教程: 创建校准模式
下一教程: 使用 OpenCV 进行摄像机校准
原始作者 | Victor Eruhimov |
兼容性 | OpenCV >= 4.0 |
本教程的目标是学习如何在给定一组棋盘格图像的情况下校准摄像机。
测试数据:使用数据/chess 文件夹中的图像。
现在,让我们编写代码,在图像中检测棋盘格并找到其与摄像机的距离。您可以将此方法应用到已知 3D 几何形状的任何对象;您可以在图像中检测该对象。
测试数据:使用数据文件夹中的 chess_test*.jpg 图像。
Mat img = imread(argv[1], IMREAD_GRAYSCALE);
bool found = findChessboardCorners( img, boardSize, ptvec, CALIB_CB_ADAPTIVE_THRESH );
FileStorage fs( filename, FileStorage::READ ); Mat intrinsics, distortion; fs["camera_matrix"] >> intrinsics; fs["distortion_coefficients"] >> distortion;
vector<Point3f> boardPoints; // fill the array ... solvePnP(Mat(boardPoints), Mat(foundBoardCorners), cameraMatrix, distCoeffs, rvec, tvec, false);
问题:您将如何计算从摄像机原点到任何一个角点的距离?回答:由于我们的图像位于 3D 空间中,因此首先要计算相对摄像机姿态。这将为我们提供 3D 到 2D 对应关系。接下来,我们可以应用一个简单的 L2 范数来计算任意两个点(角点的端点)之间的距离。