| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import cv2
- import os
- import numpy as np
- import sys
- import os
- sys.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_resolution
- resolution = 'original'
- # Checker board size
- CHESS_BOARD_DIM = (9, 6)
- # termination criteria
- criteria = (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_SIZE
- print(obj_3D)
- # Arrays to store object points and image points from all the images.
- obj_points_3D = [] # 3d point in real world space
- img_points_2D = [] # 2d points in image plane.
- # The images directory path
- image_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')
|