【发布时间】:2021-06-09 04:59:54
【问题描述】:
我正在使用 OpenCV 的 aruco::CharucoBoard 对象进行校准,并注意到它的标记检测没有找到图像中的所有可见标记/角。
我开始调查此事,并试图检测为校准而打印的电路板图像上的标记。
aruco::detectMarkers 无法检测到所有标记,除非图像大小为 640x480。
我确信需要对 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格式 -
啊,是的,你是对的,对不起
标签: c++ opencv camera-calibration aruco