본문 바로가기

카테고리 없음

OpenCV Camera Calibration 프로그램

카메라 모델과 보정, 호모그래피 변환 등을 공부하기 위해 카메라 캘리브레이션 프로그램을 만들어 보았습니다. Learning OpenCV 책에 나온 카메라 캘리브레이션 예제를 조금 수정하여 만든 프로그램이다보니 사용자 편의를 고려하지 않고 만들었습니다. 그러기에 실제 범용으로 캘리브레이션에 사용하기는 부적합해 보입니다. 인터넷을 검색해 보면 쓰기 편리한 카메라 캘리브레이션 유틸리티들이 많기때문에, 실제 카메라 캘리브레이션에는 이러한 프로그램을 다운받아 사용하는것이 편할 것입니다.

 

본 프로그램의 소스코드에 대하여 간략히 설명해보겠습니다. 캘리브레이션 클래스 코드는 CamCalib.h/cpp 파일에 구현되어 있습니다. 캘리브레이션 클래스를 CalibrationDlg.cpp 파일에서 객체를 만들어 사용하는데, onInitDialog() 함수에서 그 역할을 합니다.

_camera = new CCamOpenCV("OpenCV_Camera", 0, 640, 480);

// 인자: 체스판의 가로방향 코너 수, 세로방향 코너 수, 인식할 체스판 수
_calib = new CCamCalib(10, 7, 5, 0.314/9, 0.209/6);

SetTimer(1000, 30, 0);

 

처음에 640 x 480 크기의 캠 영상을 준비하고, 두번째로 CCamCalib 클래스의 객체를 만듭니다. 이 때, 캘리브레이션에 필요한 체스판 정보를 넘겨주는데, 체스판의 가로 방향 코너 수, 세로 방향 코너 수, 인식할 체스판 수, 체스판의 한 블럭의 가로방향 크기, 체스판의 한 블럭의 세로방향 크기를 넘겨줍니다.

 

캘리브레이션용 체스판을 프로젝트 파일 내에 첨부되어 있는 ChessBoard.pdf 파일을 A3 용지에 프린트 하여 사용하는데, 코드에 설정된 값은 이 체스판을 기준으로 설정된 값입니다. 만일 다른 체스판을 사용할 경우는 이 부분을 적절하게 수정하여야 합니다.

 

캘리브레이션이 완료되면 카메라 내부 파라메터와 왜곡 파라메터를 각각 Intrinsics.xml, Distortion.xml 파일로 저장합니다. 다른 프로그램에서 필요시 이 두 xml 파일을 복사하여 사용하거나, xml 내부의 파라메터를 읽어 사용하면 됩니다.

 

VS 2008 프로젝트 파일: OpenCV 2.3.1을 사용합니다.

calibration.zip
0.21MB

 

캘리브레이션에 사용한 체스판: 

ChessBoard.pdf
0.19MB

 

실행 동영상을 참고하십시오.