尝试使用 Charuco Board(OpenCV,C++)进行相机校准时出错
Error while trying to make Camera Calibration using Charuco Board (OpenCV, C++)
我正在尝试使用 Aruco OpenCV 库中的 Charuco Board 查找失真系数。
我正在使用为 Qt 编译的 Qt 和 OpenCV 库。
首先我需要做的是创建 Charuco Board。我已经用这个完成了:
using namespace std;
using namespace cv;
using namespace cv::aruco;
...
Ptr<Dictionary> dictionary = getPredefinedDictionary(DICT_6X6_250);
Ptr<CharucoBoard> board = CharucoBoard::create(5, 7, 0.04f, 0.02f, dictionary);
Ptr<DetectorParameters> params = DetectorParameters::create();
params->cornerRefinementMethod = CORNER_REFINE_NONE;
之后,我使用 detectMarkers(...)
和 interpolateCornersCharuco(...)
函数在照片上找到了 Markers 和 Charuco Corners 及其 ID。
我有 28 张电路板或其部件的照片。
操作结果如下所示(每张图像分配 5 到 24 个角):
Allocated Charuco Corners
之后,我尝试使用以下方法查找相机矩阵和失真系数:
Mat cameraMatrix, distCoeffs;
vector<Mat> rVectors, tVectors;
double repError = calibrateCameraCharuco(allCharucoCorners, allCharucoIds, board, imgSize,
cameraMatrix, distCoeffs, rVectors, tVectors);
allCharucoCorners
和 allCharucoIds
是大小相等的向量的向量,board
配置如上所示,imgSize
使用函数 cv::Size(loadedImg.cols, loadedImg.rows)
.
程序总是试图执行这个函数,但是无法执行。每次尝试时,我都会在没有任何关键消息的情况下让项目崩溃。
所以也许有人知道哪里出了问题?
问题出在 OpenCV 库中。
可能编译不好,或者问题出在库本身。
我之前使用过 OpenCV 4.5.3 版。
然后我编译了4.5.4版本,程序开始正常运行了。
我正在尝试使用 Aruco OpenCV 库中的 Charuco Board 查找失真系数。 我正在使用为 Qt 编译的 Qt 和 OpenCV 库。
首先我需要做的是创建 Charuco Board。我已经用这个完成了:
using namespace std;
using namespace cv;
using namespace cv::aruco;
...
Ptr<Dictionary> dictionary = getPredefinedDictionary(DICT_6X6_250);
Ptr<CharucoBoard> board = CharucoBoard::create(5, 7, 0.04f, 0.02f, dictionary);
Ptr<DetectorParameters> params = DetectorParameters::create();
params->cornerRefinementMethod = CORNER_REFINE_NONE;
之后,我使用 detectMarkers(...)
和 interpolateCornersCharuco(...)
函数在照片上找到了 Markers 和 Charuco Corners 及其 ID。
我有 28 张电路板或其部件的照片。
操作结果如下所示(每张图像分配 5 到 24 个角):
Allocated Charuco Corners
之后,我尝试使用以下方法查找相机矩阵和失真系数:
Mat cameraMatrix, distCoeffs;
vector<Mat> rVectors, tVectors;
double repError = calibrateCameraCharuco(allCharucoCorners, allCharucoIds, board, imgSize,
cameraMatrix, distCoeffs, rVectors, tVectors);
allCharucoCorners
和 allCharucoIds
是大小相等的向量的向量,board
配置如上所示,imgSize
使用函数 cv::Size(loadedImg.cols, loadedImg.rows)
.
程序总是试图执行这个函数,但是无法执行。每次尝试时,我都会在没有任何关键消息的情况下让项目崩溃。
所以也许有人知道哪里出了问题?
问题出在 OpenCV 库中。 可能编译不好,或者问题出在库本身。 我之前使用过 OpenCV 4.5.3 版。 然后我编译了4.5.4版本,程序开始正常运行了。