我在使 Charuco 相机校准正常工作时遇到了一些麻烦。据我所知,我做的一切都是正确的,但最终未失真的图像比预期的扭曲得多。它确实适用于 4x4 板,但校正的区域太小,因此我需要使其适用于 7x7 板。如果有人能看到我做错了什么,非常感谢帮助,我现在有点卡住了。所以情况是这样的:
我设置了 4 个相机,每个相机都需要校准。我每个相机都有 11 张 charuco 板 7x7_1000 的照片,所以总共 44 张图像
这些是原始图像(适用于所有相机):

根据我在教程中的理解*,并不是所有标记都需要可见,charuco 相机校准才能工作(这是 charuco bord 的整个想法)所以据我所知,源图像很好。
我检索每个相机图像集的标记和插值棋盘角,并将它们提供给 v2.aruco.calibrateCameraCharuco 函数。一切看起来都很好,正如这张带有除一个标记之外的所有标记的图像所示:

于是我继续调用cv2.un Distort函数,但结果不是我所期望的:

这是我根据教程中的示例编写的代码:
def draw_charuco_board( filename, board, size=(2000, 2000) ):
imboard = board.draw(size)
cv2.imwrite(filename, imboard)
def detect_charuco_corners( full_board_image_gray, board ):
parameters = cv2.aruco.DetectorParameters_create()
return cv2.aruco.detectMarkers(full_board_image_gray, board.dictionary, parameters=parameters)
def charuco_camera_calib( board, filename_glob_pattern, do_flip=False, flip_axis=0 ):
"""
calibrates the camera using the charuco board
@see https://docs.opencv.org/trunk/d9/d6a/group__aruco.html#ga54cf81c2e39119a84101258338aa7383
@see https://github.com/opencv/opencv_contrib/blob/master/modules/aruco/samples/calibrate_camera_charuco.cpp
"""
charuco_corners = []
charuco_ids = [] …Run Code Online (Sandbox Code Playgroud)