코드 2-2 BMP 파일 영상을 화면에 출력하는 HelloCV 소스 코드
01 #include "opencv2/opencv.hpp" 02 #include <iostream> 03 04 int main(void) 05 { 06 std::cout << "Hello OpenCV " << CV_VERSION << std::endl; 07 08 cv::Mat img; 09 img = cv::imread("lenna.bmp"); 10 11 if (img.empty()) { 12 std::cerr << "Image load failed!" << std::endl; 13 return -1; 14 } 15 16 cv::namedWindow("image"); 17 cv::imshow("image", img); 18 19 cv::waitKey(); 20 return 0; 21 }
• 1~6행 코드 2-1에서 설명한 HelloCV 소스 코드와 동일합니다.
• 8행 Mat 클래스 타입의 변수 img를 선언했습니다.
• 9행 OpenCV에서 제공하는 imread() 함수를 사용하여 lenna.bmp 파일을 불러와서 img 변수에 저장합니다. imread() 함수 이름은 영상 읽기(image read)를 뜻하며, imread() 함수도 cv 네임스페이스 안에서 선언되었기 때문에 cv::imread() 형태로 사용합니다.
• 11~14행 lenna.bmp 파일을 제대로 불러오지 못했을 경우에 대한 예외 처리 코드입니다. 프로그램 실행 디렉터리에 lenna.bmp 파일이 존재하지 않거나 혹은 lenna.bmp 파일이 손상되어 제대로 불러오지 못한 경우, Mat 클래스의 멤버 함수 Mat::empty()는 true를 반환합니다. 만약 Mat::empty() 함수가 true를 반환하여 if 문 블록 안으로 진입하면 "Image load failed!"라는 문자열을 출력한 후 프로그램을 종료합니다. 정상적으로 lenna.bmp 파일을 불러오면 16행 이하의 코드가 실행됩니다.
• 16행 namedWindow() 함수를 이용하여 영상을 화면에 나타내기 위한 새로운 창을 생성하고, 그 창에 "image"라는 이름을 부여합니다.
• 17행 imshow() 함수를 이용하여 “image”라는 이름의 창에 img 객체가 가지고 있는 lenna.bmp 영상을 출력합니다. imshow() 함수 이름은 영상 보여 주기(image show)를 의미합니다.
• 19~20행 waitKey() 함수는 사용자의 키보드 입력을 기다리는 함수이며, 사용자가 키보드를 누르기 전까지 영상을 화면에 나타나게 해 줍니다. 만약 사용자가 키보드에서 아무 키나 누르면 19행을 지나가게 되고, 20행의 return 구문을 만나면 프로그램이 종료합니다.