체스보드 영상을 이용해 카메라 내부 파라미터를 추정하고, 추정된 결과로 렌즈 왜곡을 보정하는 OpenCV 프로젝트입니다.
- 체스보드 영상으로 카메라 캘리브레이션 수행
- 캘리브레이션 결과를 JSON 파일로 저장
- 저장한 파라미터를 사용해 동영상 왜곡 보정
- 체스보드 코너 검출 결과 이미지를 저장하여 보고서에 활용 가능
- Python 3
- OpenCV
- NumPy
PowerShell에서 가상환경 활성화:
.\venv\Scripts\Activate.ps1필요 패키지 설치:
pip install opencv-python numpyOpenCV camera calibration project with chessboard-based intrinsic estimation and lens distortion correction
체스보드 영상을 이용한 OpenCV 카메라 캘리브레이션 및 렌즈 왜곡 보정
camera_calibration.py: 체스보드 기반 카메라 캘리브레이션distortion_correction.py: 캘리브레이션 결과를 이용한 왜곡 보정calibration_result.json: 캘리브레이션 결과 파일undistorted.mp4: 왜곡 보정 결과 동영상debug_corners/: 체스보드 코너 검출 결과 이미지 폴더images/: README.md에 쓸 사진
python .\camera_calibration.py --input .\chessboard_input.mp4 --pattern-size 11 7 --square-size 1.0 --output .\calibration_result.json--pattern-size 11 7: 체스보드 내부 코너 개수--square-size 1.0: 한 칸의 실제 크기--output: 캘리브레이션 결과 JSON 파일 경로
실행 후 저장되는 정보:
fx,fycx,cydist_coeffsrmsenum_views
또한 debug_corners/ 폴더에 코너 검출 결과 이미지가 저장됩니다.
python .\distortion_correction.py --input .\chessboard_input.mp4 --calibration .\calibration_result.json --output .\undistorted.mp4 --crop실행 후 왜곡이 보정된 동영상 undistorted.mp4가 생성됩니다.
fx:1643.5867fy:1638.9056cx:942.7436cy:549.9805dist_coeffs:[0.2396245978788045, -2.7042708308291297, 0.004078891722683209, -0.007235170473665011, 10.155674047239529]rmse:0.506168num_views:27
체스보드 영상을 이용해 카메라 캘리브레이션을 수행하였고, 총 27개의 유효한 프레임이 사용되었다. 추정된 내부 파라미터는 fx=1643.5867, fy=1638.9056, cx=942.7436, cy=549.9805이며, 재투영 오차 RMSE는 0.506168이었다. 추정된 왜곡 계수를 이용해 원본 영상의 렌즈 왜곡을 보정하였고, 결과 영상은 undistorted.mp4로 저장하였다.
- 스마트폰 광각 카메라처럼 왜곡이 큰 카메라일수록 보정 전후 차이가 잘 보입니다.
- 다양한 거리와 각도에서 촬영할수록 캘리브레이션 결과가 더 안정적입니다.
- 체스보드 종이는 평평한 판에 붙여야 정확도가 좋아집니다.
.png)
.png)
.png)
.png)

