尝试使用 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);

allCharucoCornersallCharucoIds 是大小相等的向量的向量,board 配置如上所示,imgSize 使用函数 cv::Size(loadedImg.cols, loadedImg.rows).

程序总是试图执行这个函数,但是无法执行。每次尝试时,我都会在没有任何关键消息的情况下让项目崩溃。

所以也许有人知道哪里出了问题?

问题出在 OpenCV 库中。 可能编译不好,或者问题出在库本身。 我之前使用过 OpenCV 4.5.3 版。 然后我编译了4.5.4版本,程序开始正常运行了。