본문 바로가기
프로그래밍/OpenCV

[OpenCV] 이미지/동영상 불러와서 출력하기 (이미지, 동영상 로드 및 출력)

by GhostWeb 2019. 8. 19.
반응형


OpenCV를 이용하여 이미지와 동영상을 불러와 출력하는 방법에 대해서 알아보도록 할게요.


 테스트 환경 : C++, VS20xx, Opencv 2.x~4.x




이미지 불러오기 / 출력하기


- 소스 코드 예제


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <opencv2/opencv.hpp> 
using namespace cv;
 
void ImageFile()
{
    Mat maImage = imread("E:\\1280_720.jpg");    // 이미지 Mat으로 불러오기
    imshow("Image", maImage);    // 이미지 창으로 열기
 
    // 이미지가 최대 해상도를 초과해도 현재 최대 해상도로 창 출력
    //namedWindow("Image-1");    // 마우스로 창 크기 변경 불가
    //namedWindow("Image-1", CV_WINDOW_AUTOSIZE);    // 기본 : CV_WINDOW_AUTOSIZE
    
    namedWindow("Image-resize", WINDOW_NORMAL);    // 마우스로 창 크기 조절 가능
    imshow("Image-resize", maImage);
    resizeWindow("Image-resize"640480);    // 창 크기 변경
 
    waitKey();    // 키보드 입력 대기
}
cs


1. JPG 파일을 Mat으로 불러오기

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

예 : Mat maImage = imread("파일 확장명을 포함한 전체 경로");


2. Mat으로 불러온 이미지를 별도의 창으로 출력하기

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

예 : imshow("창 이름", maImage);

const string& winname : 창 이름 

InputArray mat : 이미지 데이터


※ 창의 이름이 중복될 경우 새로운 창이 뜨는 것이 아니라 그 이름을 가진 창에 이미지 출력


3. 출력창 설정 관련

3-1. 출력창 이름, 옵션 설정

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

예 : namedWindow("Image-resize", WINDOW_NORMAL); // 마우스로 창 크기 조절 가능

const string& winname : 창 이름

int flags : 창의 옵션 (기본:WINDOW_AUTOSIZE)

- WINDOW_AUTOSIZE(기본) : 이미지 크기 만한 창 생성, 마우스로 창 크기 조절 불가능

- WINDOW_NORMAL : 마우스로 창 크기 조절 가능


3-2. 출력창 크기 변경

void resizeWindow(const string& winname, int width, int height);

예 : resizeWindow("Image-resize", 640, 480); // 창 크기 변경

const string& winname : 창 이름

int width : 창의 넓이

int height : 창의 높이


>> namedWindow()에서 flags 값에 의한 차이

- WINDOW_AUTOSIZE인 창 조절 시 이미지 짤림

- WINDOW_NORMAL인 창 조절 시 해당 크기에 맞게 이미지가 조정가 리사이즈 됨


4. 입력 대기

int waitKey(int delay = 0);

예 : waitKey(); // 키보드 입력 대기

int delay : 기본 0, delay가 0인 경우 키보드 입력이 있을 때까지 무한 대기

- waitKey()가 없을 경우 바로 프로그램이 종료되기 때문에 결과를 보기 위해 입력 대기를 사용


- 이미지 출력 결과


<큰 창 : 1280 x 720 / 작은 창 : 640 x 480>


<WINDOW_NORMAL로 설정된 작은 창의 크기를 줄였을 경우>


<기본값(WINDOW_AUTOSIZE)의 창을 resizeWindow() 했을 경우>




동영상 불러오기 / 출력하기


- 소스 코드 예제


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <opencv2/opencv.hpp> 
using namespace cv;
 
void VideoFile()
{
    VideoCapture vcap("E:\\test.mp4");
    namedWindow("Video", WINDOW_NORMAL);
 
    Mat maFrame;
    while(vcap.read(maFrame))
    {
        imshow("Video", maFrame);
 
        if(waitKey(0== 27)
            break;
    }
    vcap.release();
    destroyAllWindows();
}
cs


1. 동영상이라 while()문을 이용하여 이미지를 연속으로 출력해요.

2. waitKey(0)이기 때문에 키보드 입력이 있을 때까지 대기하고 키보드 입력이 있으면 다음 프레임을 출력해요.

3. 동영상 재생 시 ESC키를 누르면 재생을 종료해요.

- 작동 부분 : if(waitKey(0) == 27) break;

4. 더 이상 출력할 프레임이 없으면 while()문이 종료돼요.



반응형