← 이전 글로   다음 글로 →

Lenna 출력하기


폴더 내부에 lenna.bmp가 없으면 이미지가 불러와지지 않습니다.

입력

#include "opencv2/opencv.hpp"
#include <iostream>

int main() {
	std::cout << "Hello OpenCV" << CV_VERSION << std::endl;
	
	cv::Mat img;
	img = cv::imread("lenna.bmp");

	if (img.empty()) {
		std::cerr << "Image load failed! " << std::endl;
		return -1;
	}

	cv::namedWindow("lenna");
	cv::imshow("lenna", img);

	cv::waitKey();
	return 0;
}

출력

main코드 분석


위 main코드에는 기본적인 OpenCV 함수를 볼 수 있다.

imread(), nameWindow(), imshow(), waitKey()

  • cv::imread()

    불러온 이미지 데이터를 Mat 객체로 변환하여 반환합니다.

    Mat imread(const String& filename, int flags = IMREAD_COLOR);
    
    • filename : 불러올 영상 이름

    • flags : 영상 파일 불러오기 옵션 플래그, ImreadModes 열거형 상수를 지정한다.

      • 기본값으로 IMREAD_COLOR가 지정되어 있다. (3채널 컬러 영상으로 반환)

        ImreadModes 열거형 상수 설명
        IMREAD_UNCHANGED 입력 파일에 지정된 그대로의 컬러 속성을 사용합니다.
        IMREAD_CRAYSCALE 1채널 그레이스케일 영상으로 변환하여 불러옵니다.
        IMREAD_COLOR 3채널 BGR 컬러 영상으로 변환하여 불러옵니다.
        IMREAD_REDUCED_GRAYSCALE 크기를 1/2로 줄인 1채널 그레이스케일 영상으로 변환합니다.
        IMREAD_REDUCED_COLOR_2 크기를 1/2로 줄인 3채널 BGR 영상으로 변환합니다.
        IMREAD_IGNORE_ORIENTATION EXIF에 저장된 방향 정보를 사용하지 않습니다.
    • return : 불러온 영상 데이터(Mat 객체), 파일이 없거나 잘못된 확장자일 경우 빈 객체를 반환

    • Mat::empty()

      Mat 객체가 제대로 생성되었는지를 확인한다.

      bool Mat::empty() const
      
      • 반환값 : 행렬의 rows 또는 cols 멤버 변수가 0이거나, 또는 data 멤버 변수가 NULL이면 true를 반환
  • cv::imwrite()

    Mat 객체에 저장되어 있는 영상 데이터를 파일로 저장한다.

    bool imwrite(const String$ filename, InputArray img, const std::vector<int>& params = std::vector<int>());
    
    • filename : 저장할 영상 파일 이름

    • img : 저장할 영상 데이터(Mat 객체)

    • params : 저장할 영상 파일 형식에 의존적이 파라미터(플래그 & 값) 쌍

      ​ (paramId_1, paramValue_1, paramId_2, paramValue_2, … )

    • 반환값 : 정사적으로 저장하면 true, 실패하며 false를 반환합니다.

  • cv::namedWindow()

    void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);
    
    • winname : 영상 출력 창 상단에 출력되는 창 고유 이름, 이 문자열로 창을 구분한다.

    • flags : 생성되는 창의 속성을 지정하는 플래그, WindowFlags 열거형 상수를 지정합니다.

      WindowFlags 열거형 상수 설명
      WINDOW_NORMAL 출력 창의 크기에 맞춰 출력, 임의 변경 가능
      WINDOW_AUTOSIZE(Defualt) 출력 영상 크기에 맞춰 자동 변경됩니다. 임의 변경 불가능
      WINDOW_OPENGL OpenGL을 지원합니다.
    • 윈도우에서 창을 구분하기 위해서는 핸들이라는 숫자 값을 사용하지만,

      OpenCV에서는 각가의 창에 고유한 문자열을 부여하여 각각의 창을 구분합니다.

  • cv::destroyWindow(), cv::destroyAllWindows()

    프로그램이 동작 중에 창을 닫고 싶을 때

    void destroyWindow(const String& winname);
    void destroyAllWindows();
    
    • winname : 소멸시킬 창 이름
  • cv::moveWindow()

    void moveWindow(const String& winname, int x, int y);
    
    • winname : 위치를 이동할 창 이름
    • x : 창이 이동할 위치의 x 좌표
    • y : 창이 이동할 위치의 y 좌표
  • cv::resizeWindow()

    void resizeWindow(const String& winname, int width, int height);
    
    • winname : 크기를 변경할 창 이름
    • width : 창의 가로 크기
    • height : 창의 세로 크기
  • cv::imshow();

    Mat 클래스 객체에 저장된 영상 데이터를 화면에 출력하는 함수

    void imshow(const String& winname, InputArray mat);
    
    • winname : 영상을 출력할 대상 창 이름
    • mat : 출력할 영상 데이터(Mat 객체)
  • cv::waitKey()

    사용자로부터 키보드 입력을 받는 용도로 사용

    int waitKey(int delay = 0);
    
    • delay : 키 입력을 기다릴 시간(밀리초 단위). delay <= 0 이면 무한히 기다립니다.
    • 반환값 : 입력한 키 값. 지정한 시간이 지나면 -1을 반환