내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
체스판 보정에는 다양한 방법과 코드가 있습니다. 다른 링크를 참조하세요.fisheye/01.checkerboard/main.py at master · HLearning/fisheye (github.com)
1: 내부 매개변수 매트릭스
2: 왜곡 계수
어안 카메라의 경우 보정 코드에서도 알 수 있는 4가지 매개변수가 있습니다. 해당 매개변수의 일반적인 정의는 다음과 같습니다.
- data.camera_mat = np.eye(3, 3)
- data.dist_coeff = np.zeros((4, 1))
코드를 직접 업로드하면 됩니다.
- import os
- import numpy as np
- import cv2
- #下面的值是来自棋盘格校准后的内参矩阵K
- initial_camera_matrix = np.array([[389.3455401867884, 0.0, 630.3678577531273],
- [0.0, 388.5686773894828, 361.167452606629],
- [0.0, 0.0, 1.0]])
-
- camera_mat = np.array([[302.116935,0.0,521.926531],
- [ 0.0, 358.512097, 363.652721],
- [ 0.0, 0.0, 1.0 ]])
-
- #下面的值是来自棋盘格校准后的D
- dist_coeff = np.array([[0.05648235312901486],[-0.024826520405491565],[-0.002416551582982325],[0.0010672440368159684]])
-
- def adjust_parameters(x):
- # 获取当前滑动条的值
- fx = cv2.getTrackbarPos('fx', 'Parameters')/ 100.0
- fy = cv2.getTrackbarPos('fy', 'Parameters')/ 100.0
- cx = cv2.getTrackbarPos('cx', 'Parameters')/ 100.0
- cy = cv2.getTrackbarPos('cy', 'Parameters')/ 100.0
- k1 = cv2.getTrackbarPos('k1', 'Parameters') / 2000000 # 调整范围以便于滑动条控制
- k2 = cv2.getTrackbarPos('k2', 'Parameters') / 2000000
- p1 = cv2.getTrackbarPos('p1', 'Parameters') / 2000000
- p2 = cv2.getTrackbarPos('p2', 'Parameters') / 2000000
-
- # 更新相机矩阵和畸变系数
- new_camera_matrix = np.array([[fx, 0.0, cx],
- [0.0, fy, cy],
- [0.0, 0.0, 1.0]])
- new_distortion_coeff = np.array([[k1], [-k2], [-p1], [p2]])
-
- map1, map2 = cv2.fisheye.initUndistortRectifyMap(
- initial_camera_matrix, new_distortion_coeff, np.eye(3, 3), new_camera_matrix,
- (args.width * args.sizescale, args.height * args.sizescale), cv2.CV_16SC2)
-
-
- img = np.load("./calibrate_img/img_cam5.npy")
- print(new_camera_matrix)
- print(new_distortion_coeff)
- undistort_img = cv2.remap(img, map1, map2, cv2.INTER_LINEAR)
- undistort_img=cv2.resize(undistort_img,(img.shape[1],img.shape[0]))
-
- cv2.imshow("undistort_img",undistort_img)
-
-
- cv2.imshow("src_img",img)
-
-
-
-
- def main():
-
- cv2.namedWindow('Parameters')
-
- # 添加相机矩阵的滑动条
- cv2.createTrackbar('fx', 'Parameters', int(camera_mat[0, 0]* 10000), 90*100000, adjust_parameters)
- cv2.createTrackbar('fy', 'Parameters', int(camera_mat[1, 1]* 10000), 90*100000, adjust_parameters)
- cv2.createTrackbar('cx', 'Parameters', int(camera_mat[0, 2]* 10000), 90*1000000, adjust_parameters)
- cv2.createTrackbar('cy', 'Parameters', int(camera_mat[1, 2]* 10000), 90*100000, adjust_parameters)
-
- # 添加畸变系数的滑动条
- cv2.createTrackbar('k1', 'Parameters', int(dist_coeff[0, 0] * 100000), 4000000, adjust_parameters)
- cv2.createTrackbar('k2', 'Parameters', int(dist_coeff[1, 0] * 100000), 4000000, adjust_parameters)
- cv2.createTrackbar('p1', 'Parameters', int(dist_coeff[2, 0] * 100000), 4000000, adjust_parameters)
- cv2.createTrackbar('p2', 'Parameters', int(dist_coeff[3, 0] * 100000), 4000000, adjust_parameters)
- while True:
- key = cv2.waitKey(1) & 0xFF
- if key == ord('q'):
- break
-
- cv2.destroyAllWindows()
-
- if __name__ == '__main__':
- main()