본문 바로가기

영상처리/OpenCV 및 영상처리 이론

OpenCV 기초 - 1. 영상처리 준비 (1) + Image Watch 설치

- Image Watch

 

설명에 들어가기에 앞서서 유용한 툴을 하나 소개합니다.

 

 

 

Visual Studio - 도구 탭 - 확장 및 업데이트에 들어갑니다.

 

 

 

 

온라인 탭에서 우측 상단에 검색으로 image watch를 검색하여 설치하면 이후 디버깅 과정에서 편리하게 작업을 할 수 있습니다.

 


 

이번 글에서는 영상 불러오기, 띄우기, 저장하기에 대해서 알아보겠습니다.

 

 

영상을 불러오기 위해 먼저 영상을 담을 변수를 선언해야 합니다. OpenCV2에서부터는 이러한 이미지(영상)을 담기 위해서 cv::Mat 클래스의 객체를 이용하게 됩니다.

 

- Mat

행렬의 의미하며 cv::Mat image;을 수행하면 0x0의 사이즈를 가지는 행렬이 만들어지게 됩니다. 이때 행렬의 원소 하나하나가 영상의 한 픽셀을 담당하게 된다고 생각하시면 됩니다.

 

- Mat imread( const string& filename, int flags = 1)

간편하게 이미지를 불러올 수 있으며 파일 이름과 형이 맞지 않아 프로젝트 폴더 내에 존재하지 않으면 에러가 발생하게 됩니다. 또 불러올 파일 이름 앞에 경로를 같이 작성해주어 프로젝트 폴더 내에 있지 않아도 불러올 수 있습니다.

 

※ 참고 : filename에는 반드시 파일을 이름과 형을 함께 적어주어야 합니다. ex) asd.jpg

또 flag의 값이 >0 이면 color 이미지를 불러오며, =0일 경우 입력 이미지의 grayscale 이미지를 불러오게 됩니다. 자세한 사항은 http://docs.opencv.org/2.4/를 참고하시기 바랍니다.

 

- void namedWindow( const string& winname, int flags = WINDOW_AUTOSIZE )

파라미터로 입력된 이름에 해당하는 창을 생성시켜줍니다.

 

※ 참고 : namedWindow()로 미리 윈도우를 만들어주지 않아도 imshow()를 사용하면 입력받은 이름으로 창을 자동 생성합니다.

 

- void imshow( const string& winname, InputArray mat )

입력받은 창에 입력받은 Mat형 객체를 출력시키게 됩니다.(이미지 출력)

 

- int waitKey( int delay = 0 )

말 그대로 키보드 입력을 받는 함수로 파라미터 값에 해당하는 시간 내에 입력이 들어오면 상응하는 값을 출력하고, 시간이 지나게 된 경우 해당 라인을 넘어가게 됩니다. 

 

 

프로그램을 실행시켜보기 위해서 프로젝트 폴더 안에 lenna.png 파일을 넣어주고 imread("lenna.png")로 불러들이는 부분을 수정한 후 프로그램을 실행시켜보았고 결과는 아래와 같습니다.

 

 

- 결과

 

- lenna image

 

※ 참고 : lenna 이미지는 영상처리를 공부하는 과정에서 가장 많이 쓰이는 사진 중 하나입니다. 

 

아주 오래전 한 연구팀에서 테스트를 해야 하는데 마땅히 화질 좋은 사진이 없었고 고심하던 중 플레이보이 화보집에 있는 사진 중 lenna라는 모델의 사진을 스캔하여 사용하게 되었다고 합니다. 화보 사진이니 다른 사진들보다는 화질이 좋았겠지요. 

우연히도 이 사진에는 영상처리에서 고려할만한 고주파성분, 엣지, 밝기변화 등등 여러 성분들이 잘 포함되어있었고 이후 여기저기서 사용하게 되었다고 합니다. 

 

 

- 코드 첨부

더보기

/*------------------------------------------------------------------------------------------*\

   This file contains material supporting chapter 1 of the cookbook:  

   Computer Vision Programming using the OpenCV Library. 

   by Robert Laganiere, Packt Publishing, 2011.

 

   This program is free software; permission is hereby granted to use, copy, modify, 

   and distribute this source code, or portions thereof, for any purpose, without fee, 

   subject to the restriction that the copyright notice may not be removed 

   or altered from any source or altered source distribution. 

   The software is released on an as-is basis and without any warranties of any kind. 

   In particular, the software is not guaranteed to be fault-tolerant or free from failure. 

   The author disclaims all warranties with regard to this software, any use, 

   and any consequent failure, is purely the responsibility of the user.

 

   Copyright (C) 2010-2011 Robert Laganiere, www.laganiere.name

\*------------------------------------------------------------------------------------------*/

 

#include <opencv2/core/core.hpp>

#include <opencv2/highgui/highgui.hpp>

 

int main() {

 

// 영상 읽기

cv::Mat image= cv::imread("img.jpg");

// "My Image" 이름을 갖는 영상 창 생성

cv::namedWindow("My Image");

// 창에 영상을 보여주기

cv::imshow("My Image", image);

// 5000 ms 동안 키 입력 기다리기

cv::waitKey(5000);

 

return 1;

}

 

 

※ 해당 코드는 에이콘 출판사에서 제공하는 Robert Laganiere의 소스 코드 수정본을 사용하였습니다.