* imread()
openCV에서 이미지를 불러오기 위해서는 imread 함수를 이용해 Mat object로 변환하여 사용한다.
filename 인자는 단순히 불러오고 싶은 이미지 파일의 이름이 아니라 경로이다.
만약, 불러오고 싶어하는 이미지가 main 파일과 같은 디렉토리에 있다면 파일 이름만을 써도 정상적으로 불러온다.
하지만, 불러올 이미지가 다른 디렉토리에 존재한다면 불러오고 싶은 이미지의 경로를 작성해야한다.
예를 들어 현 디렉토리의 상위 디렉토리에 있는 'win_pic'라는 디렉토리 안에 있는 'wind.jpg'를 불러오기 위해서는
imread("../win_pic/wind.jpg);
라고 작성해야 한다는 것이다.
flags는 IMREAD 열거형 상수를 사용하여 불러올 이미지를 어떻게 불러올지에 대한 옵션을 설정하는 인자이다.
함수 선언 코드에서 볼 수 있듯이 flags에 값을 넣지 않는다면 IMREAD_COLOR 옵션으로 이미지를 불러온다.
불러온 이미지 파일을 Mat 객체로 변환하여 return한다.
* imwrite()
filename 인자는 단순히 이미지 파일 이름이 아니라 경로이다.
imread()와 마찬가지로 imwrite()에서도 filename 인자는 단순히 저장하고 싶은 이름이 아닌 저장하고 싶은 경로이다.
img 인자는 Mat, vector_<T> 등의 다양한 형태를 인자로서 받는다..
img 인자는 InputArray라는 인터페이스 클래스의 객체이다.
InputArray Mat , vector_<T> 등의 다양한 객체를 표현할 수 있는 인터페이스 클래이스이기 때문에,
이를 입력 이미지 인자로 사용하는 imwrite에서는 다양한 형태의 이미지를 입력 이미지로서 사용이 가능하다고 생각하면 된다.
이 InputArray 타입은 OpenCV에서 함수에서 입력 인자의 자료형으로 주로 사용되는데, 이 인터페이스 클래스에 대해서는 더 자세하게 따로 포스팅할 예정이다.
*openCV에서는 InputArray는 대부분 Mat 클래스 타입을 입력으로 받기 때문에,
함수 인자에 InputArray 타입이 있다면 Mat 클래스 타입을 입력으로 받는 함수라고 생각해도 된다.
params는 ImwriteFlags 열거형 상수를 이용한다.
parmas는 vector_<int> 타입으로 이미지를 어떤 옵션으로 저장할지를 설정하는 옵션이다.
예를 들자면 JPEG 압축률을 90%로 하여 저장을 하고 싶을 때 params에서 이를 설정한다는 것이다.
ImwriteFlags 열거형 상수가 궁금하다면 아래 링크를 참조하면 된다.
docs.opencv.org/3.4/d8/d6a/group__imgcodecs__flags.html#ga292d81be8d76901bff7988d18d2b42ac
OpenCV: Flags used for image file reading and writing
For TIFF, use to specify the image compression scheme. See libtiff for integer constants corresponding to compression formats. Note, for images whose depth is CV_32F, only libtiff's SGILOG compression scheme is used. For other supported depths, the compres
docs.opencv.org
* namedWindow()
winname이 중복되는 window는 생성할 수 없다.
winname이란 우리가 창을 구별하기 위해서 window에 부여하는 일종의 고유한 이름이다.
우리가 동명이인을 이름만 듣고는 구별할 수 없는 것처럼 winname이 같은 window가 존재한다면 우리는 그 window들을 구별할 수 없을 것이다.
그렇기때문에 winname은 반드시 중복되지 않는 고유한 이름으로 설정해야 한다.
(창을 생성하면 창 맨 위에 나오는 창의 이름이 바로 winname이다)
flags 인자에 따라서 창의 속성이 달라진다.
인자에 들어갈 수 있는 WindowFlags 열거형 상수는 아래의 표와 같다.
* 기본 설정인 WINDOW_AUTOSIZE에서는 창의 크기를 변경할 수 없기 때문에,
창의 크기를 변경해야 한다면 WINDOW_NORMAL로 설정해야 한다.
* destroyWindow()
* destroyAllWindow()
화면에 존재하는 모든 window들을 소멸시키는 함수이다.
* moveWindow()
좌표계는 왼쪽 상단이 원점인 left-top Origin을 사용한다.
* resizeWindow()
인자로 입력받은 width와 height는 창 전체의 크기가 아닌 창에서 view 영역의 크기를 나타낸다.
* imshow()
우리가 openCV를 사용하여 비전 프로세싱을 진행한다면 그 처리된 결과값을 보여줘야 하는 경우가 많다.
이러한 결과 이미지들을 보여주기 위해서는 반드시 필요한 중요한 함수이다.
위에서 설명했던 InputArray 타입의 입력 인자를 가지는 함수로, imshow() 또한, 대부분 Mat 타입의 이미지를 입력으로 가진다고 보면 된다.
만약, winname의 이름을 가진 window가 존재하지 않는다면, WINDOW_AUTOSIZE의 속성으로 window를 새로 생성하여 이미지를 출력한다.
* waitKey()
우리가 이미지를 window에 출력할 때 imshow()만 호출해서 코드를 짜 실행해보면 이미지가 출력되지 않는 것을 확인할 수 있다.
사실 imshow()만 호출한다면 화면 그리기 이벤트가 동작되지 않기 때문에 window에 이미지를 출력할 수 없다.
즉, imshow()를 호출한 뒤에 반드시 waitKey()를 호출해야만 이미지를 화면에 출력할 수 있다는 것이다.
이 글은 공부를 하면서 제가 정리해 놓은 내용으로 틀린 내용들이 있을 수도 있습니다.
틀린 부분에 대한 지적은 언제나 환영입니다!
-JinRona-
'OpenCV' 카테고리의 다른 글
2. Grayscale Image & Truecolor Image (0) | 2021.02.07 |
---|---|
1. 컴퓨터 비전의 개요와 영상 기초 (0) | 2021.02.06 |
댓글