| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 | import cv2import osimport numpy as npimport sysimport ossys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))from default_config import *# LỰa chọn độ phân giải bằng cách thay đổi set_resolutionresolution = 'original'# Checker board sizeCHESS_BOARD_DIM = (9, 6)# termination criteriacriteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)calib_data_path = f"camera_calibration/calib_data/{resolution}"if not os.path.exists(calib_data_path):    os.makedirs(calib_data_path)# prepare object points, like (0,0,0), (1,0,0), (2,0,0) ....,(6,5,0)obj_3D = np.zeros((CHESS_BOARD_DIM[0] * CHESS_BOARD_DIM[1], 3), np.float32)obj_3D[:, :2] = np.mgrid[0 : CHESS_BOARD_DIM[0], 0 : CHESS_BOARD_DIM[1]].T.reshape(    -1, 2)obj_3D *= SQUARE_SIZEprint(obj_3D)# Arrays to store object points and image points from all the images.obj_points_3D = []  # 3d point in real world spaceimg_points_2D = []  # 2d points in image plane.# The images directory pathimage_dir_path = f"camera_calibration/images/{resolution}"files = os.listdir(image_dir_path)for file in files:    print(file)    imagePath = os.path.join(image_dir_path, file)    image = cv2.imread(imagePath)    grayScale = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)    ret, corners = cv2.findChessboardCorners(image, CHESS_BOARD_DIM, None)    if ret == True:        obj_points_3D.append(obj_3D)        corners2 = cv2.cornerSubPix(grayScale, corners, (3, 3), (-1, -1), criteria)        img_points_2D.append(corners2)        img = cv2.drawChessboardCorners(image, CHESS_BOARD_DIM, corners2, ret)cv2.destroyAllWindows()ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(    obj_points_3D, img_points_2D, grayScale.shape[::-1], None, None)print("calibrated")np.savez(    f"{calib_data_path}/MultiMatrix",    camMatrix=mtx,    distCoef=dist,    rVector=rvecs,    tVector=tvecs,)print(f'saved to {calib_data_path}/MultiMatrix')
 |