OpencvcornerSubPix无法找到好的角点

问题描述 投票:0回答:1

我正在尝试为这张图片找到一个角落。这个角对我来说似乎足够清晰,但由于某种原因,算法似乎没有得到正确的结果。

我一直在使用可用的旋钮(终止标准、窗口大小和零区域(虽然不太确定这意味着什么,文档没有说太多)),我觉得我已经快到了,但还没有完全实现。任何指导将不胜感激。

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);

更新1:

这是原始图像,属于使用以下参数生成的 Charuco 板 行= 19,列24,square_width = 0.05,marker_width = 0.04,字典= 5x5_1000,启用legacy_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 标记被遮挡)

我要做的就是首先计算校准矩阵(按照 Charuco 检测教程中的说明使用

cv::calibrateCamera
),然后重新投影这些点(因为给定 Charuco 板,角是已知的)并查看它落在哪里。例如,对于图像中的点,重投影点落在
(141, 74)
中,距离实际位置
(157, 82)
仅有几个像素,所以我继续使用
cv::cornerSubPix
,这似乎是下一个合乎逻辑的步骤,但令我惊讶的是,
cornerSubPix
没有找到正确的拐角,因为拐角并不难找到,我想说,我没有使用正确的参数。

(我也尝试了

cv::findChessboardCorners
,但似乎裁剪边缘效果不好)

https://docs.opencv.org/3.4/df/d4a/tutorial_charuco_detection.html

c++ opencv computer-vision camera-calibration
1个回答
0
投票

我认为 Charuco 探测器无法找到右上角,因为那些 aruco 被遮挡了。

© www.soinside.com 2019 - 2024. All rights reserved.