본문 목표
OpenCV에서 이미지를 읽고 화면에 보여주는 기능을 담당하는 imread() 와 imshow() 함수에 대해서 알아본다.
키워드 : imread( ), imshow( )
알아볼 함수 원형
- 이미지 읽기 & 불러오기 ( Image Read, imread() )
using namespace cv;
using namespace std;
...
Mat img = imread("Lenna.png", 1);
imread( "fileName", flag) : fileName 에는 불러오고자 하는 이미지의 경로를 입력하고, flag는 불러오는 옵션을 입력한다.
불러오고자 하는 이미지가 프로젝트 폴더 안에 있다면 fileName 에 파일 이름을 입력하면 된다.
위와 같이 "Lenna.png" 라고 입력하면 된다.
만약 다른 폴더에 있다면 그 경로를 다 입력하면 된다.
문제는 폴더 이름이 한글로 되어있다면 제대로 인식 못 할 수 있다.
바탕화면에 저장된 이름을 불러오고 싶다면 아래와 같이 입력해야 한다.
"C:\\Users\\<username>\\Desktop\\Lenna.png"
<username>은 사용자마다 다르므로 직접 확인하여 입력해야한다.
폴더 표시할 때, \를 한 개가 아닌 두 개를 입력해야 폴더로 인식한다는 것에 주의하자!
flag 는 대표적으로 3가지가 있다. 내용을 나타내게 적어도 되고, 숫자를 사용해도 된다.
'IMREAD_COLOR' or '1' : 이미지 파일을 색정보(Color)를 포함해서 불러온다. Default 설정이라서 생략이 가능하다.
'IMREAD_GRAYSCALE' or '0' : 이미지 파일을 흑백(Grayscale)으로 변환해서 불러온다.
'IMREAD_UNCHANGED' or '-1' : 이미지 파일을 색정보에 알파채널(Alpha channel)까지 포함해서 불러온다.
이외에도 많다. color 와 graysclae 로 불러오면서 크기만 줄일 수 있다.
- 이미지 보여주기 ( Image Show, imshow )
...
imshow("img", img);
waitKey(0);
...
imshow( "windowName", image) : windowName 에는 이미지를 보여줄 윈도우 창의 이름을 입력하고,
image 에는 보여주고자 하는 <Mat> 형식의 image 변수 이름을 입력한다.
waitKey(delay time) : delay time에는 키입력을 기다릴 시간을 입력한다.
delay time 만큼 해당 코드 부분에서 코드가 멈추며, 키입력이 감지되면 다음 코드로 진행한다.
0을 입력하면 무한정 키 입력을 기다리게 된다.
imshow( ) 함수를 사용하게 되면, 거의 waitKey( ) 함수가 필수적으로 따라와야 한다.
waitKey( ) 함수를 사용하지 않으면 이미지가 노출되자마자 코드가 끝나기 때문이다.
코드 테스트 결과
- CODE
#include <opencv2/highgui.hpp>
using namespace cv;
using namespace std;
int main(int ac, char** av) {
Mat color_img = imread("Lenna.png",IMREAD_COLOR);
Mat grayscale_img = imread("Lenna.png", IMREAD_GRAYSCALE);
Mat unchanged_img = imread("Lenna.png", IMREAD_UNCHANGED);
Mat reduced_img = imread("Lenna.png", IMREAD_REDUCED_COLOR_2);
Mat reduced_grayscale_img = imread("Lenna.png", IMREAD_REDUCED_GRAYSCALE_4);
imshow("color_img", color_img);
imshow("grayscale_img", grayscale_img);
imshow("unchanged_img", unchanged_img);
imshow("reduced_img", reduced_img);
imshow("reduced_grayscale_img", reduced_grayscale_img);
waitKey(0);
return 0;
}
- RESULT
코드에 적혀있는 imshow( ) 의 창이름과 해당 사진들을 유심히 관찰해보길 바란다.
reduced 옵션을 적용한 사진들은 크기가 작아진 것을 볼 수 있다.
나중에 다루겠지만, 색채널 변환에 있어서 cvtColor( ) 함수를 이용할 경우가 많은데,
귀찮게 여러번 할 필요 없이 imread( ) 함수로 이미지를 불러오면서 색채널과 이미지 크기를 바꿀 수 있음을 알아가는 것이 제일 중요하다.
도움이 되었거나, 문제가 있는 경우 댓글로 알려주세요~!
감사의 댓글은 작성자에게 큰 힘이 됩니다 ^^
'코딩 > OpenCV' 카테고리의 다른 글
[C++ opencv] 동영상 불러오기 VideoCapture() (1) | 2020.06.24 |
---|---|
[C++ opencv] 카메라, 웹캠 영상 입력받기 VideoCapture() (0) | 2020.06.24 |
[C++ opencv] Grayscale 변환에 대한 고찰 1 (4) | 2020.06.17 |
[C++ opencv] 컬러이미지 흑백으로 변환 , RGB to Grayscale (0) | 2020.06.17 |
가장 쉽고 정확하게 C++ OpenCV 설치하기 (모든버전 공통) (48) | 2020.06.15 |
댓글