OpenCV cornerSubPix无法准确定位角点的技术求助
Charuco板边缘角点cornerSubPix定位失败问题排查
我需要定位图像中一个视觉上清晰可辨的角点,但cornerSubPix算法始终无法准确定位。已尝试调整终止条件、窗口大小、零区域等参数(对零区域的含义不甚了解,相关文档说明较少),仍未解决问题,恳请指导。
当前使用代码
cv::TermCriteria criteria = cv::TermCriteria(cv::TermCriteria::MAX_ITER | cv::TermCriteria::EPS, 30, 0.1); cv::cornerSubPix(image_gray, corners, cv::Size(10, 10) /*windows size*/, cv::Size(-1,-1) /*zero zone*/, criteria);
更新说明
该图像来自一个Charuco板,生成参数如下:
- 行数19、列数24
- 正方形宽度0.05、标记宽度0.04
- 字典为5x5_1000,启用legacy_charuco标志
Charuco板生成代码:
cv::aruco::Dictionary dictionary = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_5X5_1000); cv::Ptr<cv::aruco::CharucoBoard> board = cv::makePtr<cv::aruco::CharucoBoard>(cv::Size(19, 34), 0.05f, 0.04f, dictionary); board->setLegacyPattern(true);
问题背景与尝试方案
OpenCV自带的Charuco/Aruco检测器无法定位左上角及部分边缘角点(推测因边缘Aruco标记大多被遮挡)。我的解决思路是:
- 通过
cv::calibrateCamera计算标定矩阵 - 重投影已知的Charuco板角点,例如目标角点重投影位置为(141,74),但实际位置为(157,82)
- 使用
cornerSubPix对重投影位置进行微调,但未得到正确结果
另外也尝试过cv::findChessboardCorners,但该方法对边缘裁剪的图像适配性不佳。
内容的提问来源于stack exchange,提问作者zeellos
相关产品推荐
相关产品推荐

