OpenCV 4.11.0
开源计算机视觉库
|
上一篇教程: 创建标定图案
下一篇教程: 使用OpenCV进行相机标定
原作者 | Victor Eruhimov |
兼容性 | OpenCV >= 4.0 |
本教程的目标是学习如何根据一组棋盘格图像对相机进行标定。
测试数据: 使用您 data/chess 文件夹中的图像。
现在,让我们编写代码,该代码检测图像中的棋盘格并找到它与相机的距离。您可以将此方法应用于任何具有已知 3D 几何形状的对象;您可以在图像中检测到该对象。
测试数据: 使用 data 文件夹中的 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 范数来计算任意点(角的端点)之间的距离。