def calculate_camera_calibration(calib_path, rows, cols, cal_image_size):
"""Calculates the camera calibration based on chessboard images.
Args:
calib_path: calibration data (imgs) dir path
rows: number of rows on chessboard
cols: number of columns on chessboard
Returns:
a `dict` with calibration points
"""
objp = np.zeros((rows * cols, 3), np.float32)
objp[:, :2] = np.mgrid[0:cols, 0:rows].T.reshape(-1, 2)
objpoints = []
imgpoints = []
images = glob(calib_path)
cal_images = np.zeros((len(images), *cal_image_size), dtype=np.uint8)
successfull_cnt = 0
for idx, fname in enumerate(tqdm(images, desc='Processing image')):
img = scipy.misc.imread(fname)
if img.shape[0] != cal_image_size[0] or img.shape[1] != cal_image_size[1]:
img = scipy.misc.imresize(img, cal_image_size)
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
ret, corners = cv2.findChessboardCorners(gray, (cols, rows), None)
if ret:
successfull_cnt += 1
objpoints.append(objp)
imgpoints.append(corners)
img = cv2.drawChessboardCorners(img, (cols, rows), corners, ret)
cal_images[idx] = img
print("%s/%s camera calibration images processed." %
(successfull_cnt, len(images)))
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(
objpoints, imgpoints, cal_image_size[:-1], None, None)
calibration = {'objpoints': objpoints,
'imgpoints': imgpoints,
'cal_images': cal_images,
'mtx': mtx,
'dist': dist,
'rvecs': rvecs,
'tvecs': tvecs}
return calibration
评论列表
文章目录