我正在使用OpenCV的
我开始调查此事,并尝试在用于校准的板子图像上检测标记。除非图像大小为640x480,否则
我确信需要在
以下是相关代码:
aruco::CharucoBoard
对象进行校准,发现其标记检测未能在图像中找到所有可见的标记/角点。我开始调查此事,并尝试在用于校准的板子图像上检测标记。除非图像大小为640x480,否则
aruco::detectMarkers
无法检测到所有标记。我确信需要在
aruco::DetectorParameters
中进行一些微调,但我还没有找到最佳值。以下是相关代码:
int nx = 16;
int ny = 10;
double sqrLength = 1.0;
double markerLength = 0.8;
Ptr<aruco::Dictionary> dictionary = aruco::getPredefinedDictionary(aruco::DICT_6X6_250);
Ptr<aruco::CharucoBoard> board = aruco::CharucoBoard::create(nx, ny, sqrLength, markerLength, dictionary);
aruco::DetectorParameters params = aruco::DetectorParameters::create();
Mat boardImg;
Size boardImgSize = Size(640 * 2, 480 * 2);
board->draw(boardImgSize, boardImg);
vector<int> markerIds;
vector<vector<Point2f>> markerCorners, rejected;
aruco::detectMarkers(boardImg, board->dictionary, markerCorners, markerIds, params, rejected);
cout << markerIds.size() << endl;
aruco::drawDetectedMarkers(boardImg, markerCorners);
imshow("board", boardImg);
waitKey(30);
这个板子上的标记总数为80,上述代码仅适用于Size boardImgSize = Size(640, 480)
时发现所有标记。
您有改进检测/调整哪些参数的想法吗?
board->draw(...)
“真实”的图像以*.pgm格式存在。 - Zachi Shtain