You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCV 4.10下ChArUco棋盘格相机标定无匹配点问题求助

OpenCV 4.10下ChArUco棋盘格相机标定无匹配点问题求助

我最近在用OpenCV和Python做相机标定,结果脚本死活找不到匹配点。为了排除其他干扰,我直接用带白色边框的ChArUco图案作为输入图像来测试,可还是连一个点都检测不到。下面是我写的可以直接运行的测试脚本:

import cv2
import numpy as np

aruco_dict = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_4X4_50)
board = cv2.aruco.CharucoBoard((5, 7),0.01, 0.008, aruco_dict)
board.setLegacyPattern(True)

b = board.generateImage((200,200),marginSize = 20)

#image = cv2.imread('charuco_board.png')
#gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = b
# first detection
aruco_detector = cv2.aruco.ArucoDetector(aruco_dict)
marker_corners, marker_ids, rejected_candidates = aruco_detector.detectMarkers(image)
print(marker_corners)
# refine
if marker_ids is not None:
    charuco_params = cv2.aruco.CharucoParameters()
    charuco_detector = cv2.aruco.CharucoDetector(board, charuco_params)
    charuco_corners, charuco_ids, _ = charuco_detector.detectBoard(gray, marker_corners, marker_ids)

    image_copy = image.copy()
    image_markers = cv2.aruco.drawDetectedMarkers(image_copy, marker_corners, marker_ids)
    image_charuco = cv2.aruco.drawDetectedCornersCharuco(image_markers, charuco_corners, charuco_ids)

    cv2.imshow('Detected ChArUco Corners', image_charuco)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
else:
    print("No corners detected.")

后来我排查发现,DICT_4X4_50这个字典好像有问题!换成DICT_6X6_250之后就能正常检测了,同时我还调整了生成图像的尺寸,修正了检测函数的参数传递方式。下面是可以正常运行的修正版脚本:

import cv2
import numpy as np

aruco_dict = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_6X6_250)
board = cv2.aruco.CharucoBoard((5, 7),0.01, 0.008, aruco_dict)
board.setLegacyPattern(True)

b = board.generateImage((2000,2000),marginSize = 20)
cv2.imwrite('charuco_board.png',b)
gray = b
# first detection
aruco_detector = cv2.aruco.ArucoDetector(aruco_dict)
marker_corners, marker_ids, rejected_candidates = aruco_detector.detectMarkers(b)
print(marker_corners)
# refine
if marker_ids is not None:
    charuco_params = cv2.aruco.CharucoParameters()
    charuco_detector = cv2.aruco.CharucoDetector(board, charuco_params)
    #charuco_corners, charuco_ids, markerCorners, markerIds = charuco_detector.detectBoard(gray, marker_corners, marker_ids)
    charuco_corners, charuco_ids, markerCorners, markerIds = charuco_detector.detectBoard(gray)
    image_copy = b.copy()
    image_markers = cv2.aruco.drawDetectedMarkers(image_copy, marker_corners, marker_ids)
    image_charuco = cv2.aruco.drawDetectedCornersCharuco(image_markers, charuco_corners, charuco_ids)

    cv2.imshow('Detected ChArUco Corners', image_charuco)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
else:
    print("No corners detected.")

备注:内容来源于stack exchange,提问作者Bob8751

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 14:48:02