본문 바로가기

카테고리 없음

OpenCV Camera Calibration 프로그램 2 (C++)

카메라 보정(Camera Calibration)은 카메라의 내부 행렬 및 왜곡 파라미터를 구하는 과정입니다. 카메라 보정은 카메라에서 입력받은 영상으로 3차원 복원을 하는 등의 작업에 앞서 반드시 수행하여야 할 작업입니다. 여기서 직접 카메라 보정 알고리즘을 구현하는 것이 아니라 OpenCV에서 제공하는 알고리즘을 사용하여 GUI로 쉽게 사용가능하도록 구현하였습니다. 예전에 작성한 OpenCV Camera Calibration 프로그램()의 C++ 버젼이 됩니다.

calibration_mono.zip
0.22MB

 

상기 프로젝트는 OpenCV 라이브러리의 samples/cpp/calibration.cpp 파일을 참조하여 작성하였습니다.

 

만일 프로젝트에 첨부된 체스판이 아닌 경우이거나 체스판 인식 횟수를 변경하실 때에는 다음 파일에서 인식할 체스판 수와 Calibration 객체의 인자를 조정하시면 됩니다.

 

calibrationDlg.cpp 파일:

// Global Variables
enum { NOTHING = 0, CALIBRATION = 1, UNDISTORTION = 2 };

static int mode = NOTHING;
static const int nframes = 10;                 // 인식할체스판수
static bool reg_chessboard = false;
static VideoCapture capture;

// 인자: 체스판의가로방향코너수, 세로방향코너수, 한블럭의가로방향길이, 한블럭의세로방향길이
static Calibration calib (10, 7, 0.314f/9, 0.209f/6);

 

프로그램을 컴파일 하여 실행하면 다음과 같은 대화상자가 뜹니다.

 

상단의 라디오 버튼의 기능에 대해 설명해 보자면, Nothing은 카메라에서 입력된 영상을 그대로 보여줍니다. Calibration을 선택하면 체스판을 인식하고 [Rec. Chessboard] 버튼을 누를 때마다 체스판 이미지를 인식합니다. 10개의 이미지가 모아지면 캘리브레이션을 수행하여 결과를 calibration_data.yml 파일에 저장합니다. Undistortion을 선택하면 calibration_data.yml 파일을 읽어 카메라에서 입력된 영상을 보정하여 화면에 표시합니다.