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", 640, 480); // 창 크기 변경 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()문이 종료돼요.
'프로그래밍 > OpenCV' 카테고리의 다른 글
OpenCV 버전 확인하는 방법 (Ubuntu/Linux, opencv version check) (0) | 2020.01.09 |
---|---|
Unbuntu에 OpenCV 설치하기, 설치 버전 확인하기 (Ubuntu, Linux) (1) | 2020.01.07 |
OpenCV 설정 (0) | 2019.08.19 |