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() 함수를 이용해 창을 모두 닫고 프로그램을 종료합니다.

기업문화 엿볼 때, 더팀스

로그인

/