충분히 공부하여 한번에 적으려 했지만 적더라고 꾸준히 올리는게 좋다 생각해 조금씩 올릴 예정이다.
오늘은 영상편집 이전 이미지를 먼저 어떻게 출력하는지 알아보려 한다.
기본적으로 이미지를 불러오는 선언은 Mat 변수명 = imread(이미지 명, flag);
의 형태로 선언을 한다.
Mat
은 OpenCV에서 사용하는 클래스이며 행렬을 표현하기 위한 클래스이다. imread 함수를 통해 이미지를 이 Mat 타입에 저장을 하는데 이미지 명
은 말 그대로 저장할 이미지의 이름이다. 이미지가 프로젝트 폴더 안에 있다면 이미지 명만 적어도 되지만, 그렇지 않다면 이미지의 절대경로로 입력하여야 한다.
flag 이미지를 어떻게 출력할 것인지 결정하는 역활을 하며 IMREAD_COLOR
, IMREAD_GRAYSCALE
, IMREAD_UNCHANGED
세가지가 존재한다 한다.
IMREAD_COLOR
는 이미지를 컬러로 출력한다는 의미이며 숫자로 1을 넣어도 되며, 기입 안할시 디폴트로 설정된다.
IMREAD_GRAYSCALE
는 이미지를 흑백으로 출력한다는 의미이고 숫자로는 0을 넣으면 된다.
IMREAD_UNCHANGED
는 이미지를 컬러 + 알파채널로 출력한다는 의미인며 숫자로는 -1을 넣으면 된다. 알파채널은 RGBA로 출력하는 것이며 투명도를 결정하는 A값이라 한다.
이미지를 Mat 안에 저장하였다면 이제 출력을 하면 된다. 출력은 imshow()
함수를 사용하며 imshow(“windowName”, image)
형식의 파라미터가 필요하다.
windowName
은 출력할 윈도우의 이름, image
는 출력할 이미지다.
waitKey(0)
를 코드에 넣어서 키를 누르지 않으면 프로그램이 종료되지 않아 이미지가 사라지는 것을 방지할 수 있다.
#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
//빈 행렬
Mat color = imread("god.jpg", IMREAD_COLOR); // 원본
Mat gray = imread("god.jpg", IMREAD_GRAYSCALE); // 원본
Mat rgba=imread("god.jpg",IMREAD_UNCHANGED); // 원본
imshow("ColorPrint", color);
imshow("GratPrint", gray);
imshow("rgbaPrint", rgba);
waitKey(0);
return 0;
}
만약 내가 이미지의 색정보를 알고 싶다면 Image Watch
기능을 사용하면 쉽게 확인이 가능하다. Image Watch
를 사용하기 위해서는 Visual Studio 상단의 확장
-> 확장 관리
에서 Image Watch
를 검색해 다운받으면 된다.
설치를 마쳤다면 Visual Studio 상단의 보기
-> 다른 창
-> Image Watch
를 클릭하여 나온 창을 보기 편한곳에 도킹하면 된다.
이제 중단점을 설정하고 프로그램을 실행하면 방금 띄운 창에 Mat에 넣어둔 이미지가 출력된다. 이 이미지들에 휠을 돌려 확대하면 해당 이미지의 값을 확인하는 것이 가능하다.