OpenCV 4.7.0中aruco.interpolateCornersCharuco属性错误求助
问题解决:AttributeError: module 'cv2.aruco' has no attribute 'interpolateCornersCharuco'
在OpenCV 4.x版本(包括你使用的4.7.0)中,interpolateCornersCharuco函数已作为CharucoBoard类的成员方法存在,不再是cv2.aruco模块的顶层函数,需通过创建好的board对象调用该方法。
修改后的代码如下:
board = aruco.CharucoBoard((row, col), squareLength, markerLenght, arUsedDictionnary) # 改用board对象调用interpolateCorners方法 charucoretval, charucoCorners, charucoIds = board.interpolateCorners(arMarkersCorners, arMarkersId, grayImg, cameraCalibrationMatrix, calibrationDistCoef) # 修正drawDetectedCornersCharuco的参数:使用插值得到的Charuco角点和ID computedImage = aruco.drawDetectedCornersCharuco(img, charucoCorners, charucoIds, (0,255,0)) retval, rvec, tvec = aruco.estimatePoseCharucoBoard(charucoCorners, charucoIds, board, cameraCalibrationMatrix, calibrationDistCoef)
补充两个关键细节:
- 调用
interpolateCorners时传入相机内参和畸变系数,可提升角点插值精度;若无需高精度,也可传None替代。 - 原代码中
drawDetectedCornersCharuco的参数错误,需使用插值生成的charucoCorners和charucoIds,才能正确绘制Charuco板的内角点。
若问题仍存在,确认安装的是完整的opencv-contrib-python包(ArUco/Charuco属于OpenCV的contrib扩展模块),执行以下命令更新:
pip install --upgrade opencv-contrib-python
内容的提问来源于stack exchange,提问作者Maxime Dumonteil
相关产品推荐
相关产品推荐

