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

OpenCV 4.10中ChArUco板相机内参校准报错的解决咨询

解决OpenCV 4.10中ChArUco相机内参校准的AttributeError问题

在OpenCV 4.10版本中,使用ChArUco板进行相机内参校准时,若调用cv2.aruco.calibrateCameraCharuco会触发以下错误:

AttributeError: module 'cv2.aruco' has no attribute 'calibrateCameraCharuco'

这是因为OpenCV 4.10已将Aruco相关的校准功能从cv2.aruco子模块迁移到了主cv2模块,官方文档也明确标注了这一变动。

修复步骤

  1. 替换校准函数的调用路径:将cv2.aruco.calibrateCameraCharuco改为cv2.calibrateCameraCharuco
  2. 确保参数传递正确:函数参数与原cv2.aruco.calibrateCameraCharuco完全兼容,无需修改参数列表

修改后的完整代码

import os
import cv2
import glob

img_folder_path = f"{os.getenv('HOME')}/rgb/"

aruco_dict = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_5X5_250)
board = cv2.aruco.CharucoBoard(
    size=(14, 9), 
    squareLength=0.04, 
    markerLength=0.03, 
    dictionary=aruco_dict)

ch_params = cv2.aruco.CharucoParameters()
detector_params = cv2.aruco.DetectorParameters()
refine_params = cv2.aruco.RefineParameters(minRepDistance=0.05, errorCorrectionRate=0.1, checkAllOrders=True)

ch_detector = cv2.aruco.CharucoDetector(
    board=board,charucoParams=ch_params, 
    detectorParams=detector_params, 
    # refineParams=refine_params
)

all_ch_corners = []
all_ch_ids = []
image_size = None

images = glob.glob(img_folder_path + '/*.png')

for image_file in images:
    image = cv2.imread(image_file)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    
    charucoCorners, charucoIds, markerCorners, markerIds = ch_detector.detectBoard(gray)
    
    if charucoIds is not None and len(charucoCorners) > 3:
        all_ch_corners.append(charucoCorners)
        all_ch_ids.append(charucoIds)

# 关键修改:将cv2.aruco.calibrateCameraCharuco改为cv2.calibrateCameraCharuco
result, camera_matrix, dist_coeffs, rvecs, tvecs = cv2.calibrateCameraCharuco(
    all_ch_corners, 
    all_ch_ids, 
    board, 
    gray.shape[:2],  # 建议用灰度图尺寸,避免彩色图通道干扰
    None, 
    None
)
print("camera_matrix: \n", camera_matrix, "\ndist_coeffs: \n", dist_coeffs)

额外说明

  • 除校准函数外,Aruco的检测、板定义等功能仍保留在cv2.aruco子模块中,无需修改
  • 建议使用灰度图的尺寸(gray.shape[:2])作为校准的图像尺寸参数,避免彩色图像的通道维度造成潜在问题

内容的提问来源于stack exchange,提问作者bhomaidan90

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:42:08