为什么 cv2.aruco.detectMarkers() 中 Charucos 的检出率这么差?

Why is detection rate of Charucos in cv2.aruco.detectMarkers() so poor?

我很难弄清楚为什么 cv2.aruco.detectMarkers() 在使用我的校准板查找多个标记时会遇到问题。摆弄参数并不能从根本上提高质量。字典是正确的,因为我在打印前用数字模板试过了。 这是我从真实图像中检测 CHARuco 标记的方法:

import cv2
from cv2 import aruco
#ChAruco board variables
CHARUCOBOARD_ROWCOUNT = 26
CHARUCOBOARD_COLCOUNT = 26
ARUCO_DICT = cv2.aruco.Dictionary_get(aruco.DICT_4X4_1000)

#Create constants to be passed into OpenCV and Aruco methods
CHARUCO_BOARD = aruco.CharucoBoard_create(
    squaresX=CHARUCOBOARD_COLCOUNT,
    squaresY=CHARUCOBOARD_ROWCOUNT,
    squareLength=5, #mm
    markerLength=4, #mm
    dictionary=ARUCO_DICT)

 #load image     
 img = cv2.imread('imgs\frame25_crop.png', 1)

test image with CHAruco markers

#initialize detector
parameters =  aruco.DetectorParameters_create()
parameters.adaptiveThreshWinSizeMin = 150
parameters.adaptiveThreshWinSizeMax = 186

#Find aruco markers in the query image
corners, ids, _ = aruco.detectMarkers(
    image=img,
    dictionary=ARUCO_DICT,
    parameters=parameters)   

#Outline the ChAruco markers found in our image
img = aruco.drawDetectedMarkers(
    image=img, 
    corners=corners)

结果如下:只找到3个marker,不好。

resulting image with found markers

有没有人知道如何显着改善检测器的结果?

不看你的代码我可能会说你选择的图像质量和视角有点差。您可以尝试使用更清晰的标记视图。例如,将标记挂在墙上后退一两步,并尝试在更好的光线下拍照,如果没有必要,不要添加额外的旋转,并保持高对比度 :)。这可能会产生更好的结果。

你的图片翻转了。

用这行代码修复它:

img = cv2.flip(img, 0)