Program/OPEN_CV

[Open CV] OpenCV-Python 기초 사용법 _ 카메라와 동영상 처리하기1

사막여유 2022. 4. 29. 22:33
728x90

 

Opencv에서는 VideoCapture 클래스를 사용하여 카메라와 동영상으로부터 Frame을 받아오는 작업을 한다.

VideoCapture 라는 클래스를 만들고 Open() 의 함수가 카메라 or 동영상을 연결시키고

read() 함수를 계속 호출하여 현재 프레임을 읽어오는 처리를 기본적으로 사용한다.

 

 - 카메라 열기 ( cv.VideoCapture )

VideoCapture로 클래스를 열어주고 index의 인자에는 현재 장치관리자에 등록되어있는 카메라의 번호를 입력해준다.

자세히 들어가면 camera_id + domain_offset_id 인데 donmain_offset_id에 0을 입력해주면 운영체제가 알아서 연결해준다. 그래서 카메라 연결수에 맞춰서 인덱스를 입력해주면 된다.

 

이후 Open이 제대로 되었는지 isOpend()함수로 확인할 수있고 read함수를 사용하여 프레임을 받아오면 된다.

여기서 frame이라는 불리언 변수를 사용하여 read가 제대로 되고있는지 확인하는 것이 좋다.

 

 

위 소스코드처럼 while문을 돌면서 프레임을 읽어오는데 ESC 키를 누르면 윈도우 창을 나가도록 할수있다.

 

그리고 중요한 팁이 있는데

cap = cv2.VideoCapture()

cap.Open(0) 의 함수는 

cap = cv2.VideoCapture(0)라는 함수로 간소화 시킬 수 있다.

 

 - cap.get(propId) 

위 함수의 매개변수에는 아래 인자들을 사용할 수 있다.

CAP_PROP_FRAME_WIDTH 프레임 가로크기

CAP_PROP_FRAME_HEIGHT 프레임 세로크기

CAP_PROP_FPS 초당 프레임수

CAP_PROP_FRAME_COUNT 비디오 파일의 총 프레임 수 

CAP_PROP_POS_MSEC 밀리초 단위로 현재 위치

CAP_PROP_POS_FRAMES 현재 프레임 번호

CAP_PROP_EXPOSURE 노출

 

현재 노트북에 연결되어있는 웹캠의 몇가지 정보들을 담아보자면

640.0 480.0 30.0 ( Width , Height, Frame )의 정보를 받아오는걸 볼 수 있다.

 

또한 위 이미지의 크기를 사용자가 지정해줄 수 있는데 

카메라에서 지원해주지 않는 크기면 안될 가능성도 있다.

 

그리고 read 해서 읽어온 frame의 정지영상을 이미지 처리해줄수 있는데  캡쳐되는 이미지의 윤곽선을

그려주면 아래와 같은 영상을 얻을 수 있다.

 

 

그리고 저장되어있는 비디오를 로드하여 사용할수도 있는데

cap = cv2.VideoCapture('video1.mp4') 라는 실행폴더에있는 동영상파일의 문자열을 넣어주면 로드할 수 있다.

그런데 비디오 파일을 로드했을때는 파일 재생이 끝났을때 받아올 프레임이 없기때문에 break로 빠져나가게된다.

 

 

 * Numpy란 파이썬의 수치 해석용 라이브러리 인데 다차원 행렬 자료구조인 ndarray를 핵심으로 선형대수 연산이

   필요한 알고리즘에 사용된다.

   ndarray는 Numpy의 핵심인 다차원 행렬 자료구조 클래스라고 한다. 

   출처 : https://iop8890.tistory.com/9

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

728x90