OPENCV로 기본 카메라 데이터 띄우기

모빌테크

OPENCV로 컴퓨터에 연결된 기본 카메라(웹캠) 데이터를 화면에 띄우는 방법을 소개하겠습니다.

먼저 전체 코드와 그 실행 결과 예시를 보여드리고, 코드를 부분별로 나누어 설명하겠습니다.

전체 코드

#include "opencv2/opencv.hpp" #include <iostream> int main() { cv::VideoCapture capture(0); if (!capture.isOpened()) { std::cout << "ERROR : unable to open camera" << std::endl; return -1; } cv::Mat frame; cv::namedWindow("main",1); while(1){ capture >> frame; cv::imshow("main",frame); if(cv::waitKey(1) > 0) break; } cv::destroyAllWindows(); return 0; }

실행 결과 예시

실시간으로 웹캠이 받아온 데이터를 "main"창에 출력합니다.

1. 카메라 열기

cv::VideoCapture capture(0); if (!capture.isOpened()) { std::cout << "ERROR : unable to open camera" << std::endl; return -1; }

컴퓨터에 웹캠이 하나만 연결되어있다면 cv::VideoCapture capture(0)으로 구동 가능하며, 여러대가 연결되어 있을 경우 0, 1, 2 ... 순으로 번호가 붙어 그에 맞는 숫자를 넣으면 같은 방법으로 사진을 카메라를 연결 할 수 있습니다.

2. 이미지 로드 준비

cv::Mat frame; cv::namedWindow("main",1);

카메라로부터 받아온 장면을 저장하기 위한 Mat class를 선언하고, 출력을 위한 main 창을 만듭니다.

namedWindow 함수의 두번째 인자는 창의 성격을 결정합니다.

예를 들어 0을 넣는다면 자유롭게 크기 변환이 가능한 창이 생성되지만, 1을 넣을 경우에는 고정 크기의 창으로 생성 됩니다.

참고 : https://docs.opencv.org/3.4.2/d7/dfc/group__highgui.html#ga5afdf8410934fd099df85c75b2e0888b

3. 이미지 출력

capture >> frame; cv::imshow("main",frame);

카메라로부터 프레임을 얻어 frame에 저장 후, imshow 함수를 이용하여 main 창에 출력합니다.

4. 종료

while(1){ capture >> frame; cv::imshow("main",frame); if(cv::waitKey(1) > 0) break; } cv::destroyAllWindows(); return 0; }

waitKey 함수는 키입력이 없을 경우 -1을 반환합니다.

키입력이 없을 경우에는 지속적으로 이미지를 출력하다 키입력이 들어올때 break 문을 수행하고 cv::destroyAllWindows() 함수를 이용해 창을 모두 닫고 프로그램을 종료합니다.

기업문화 엿볼 때, 더팀스

로그인

/