cv2.VideoCapture 클래스
- OpenCV에서는 카메라와 동영상으로부터 프레임(frame)을 받아오는 작업을 cv2.VideoCapture 클래스 하나로 처리한다.
카메라 열기
cv2.VideoCapture(index, apiPreference=None) -> retval
- index : camera_id + domain_offset_id. 시스템 기본 카메라를 기본 방법으로 열려면 index에 0을 전달
- apiPreference : 선호하는 카메라 처리 방법을 지정
- retval : cv2.VideoCapture 객체
cv2.VideoCapture.open(index, apiPreference=None) -> retval
- retval : 성공하면 True, 실패하면 False.
동영상, 정지 영상 시퀀스, 비디오 스트림 열기
cv2.VideoCapture(filename, apiPreference=None) -> retval
- filename : 비디오 파일 이름. 정지 영상 시퀀스, 비디오 스트림 URL 등
- ex. 'video.avi', 'img_%02d.jpg', 'protocol://host:port/script?params|auth'
- retval : cv2.VideoCapture 객체
cv2.VideoCapture.open(filename, apiPreference=None) -> retval
- retval : 성공하면 True, 실패하면 False.
비디오 캡쳐가 준비되었는지 확인
cv2.VideoCapture.isOpened() -> retval
- retval : 성공하면 True, 실패하면 False
프레임 받아오기
cv2.VideoCapture.read(image=None) -> retval, image
- retval : 성공하면 True, 실패하면 False.
- image : 현재 프레임 (numpy.ndarray)
카메라, 비디오 장치 속성 값 참조
cv2.VideoCapture.get(propId) -> retval
- propId : 속성 상수. (OpenCV 문서 참조)
- retval : 성공하면 해당 속성 값, 실패하면 0.
cv2.VideoCapture.set(propId, value) -> retval
- propId : 속성 상수
- value : 속성 값
- retval : 성공하면 True, 실패하면 False.
카메라 처리 예제
import cv2
import sys
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("Camera open failed!")
exit()
while True:
ret, frame = cap.read()
if not ret:
break
inversed = ~frame
cv2.imshow('frame', frame)
cv2.imshow('inversed', inversed)
if cv2.waitKey(10) == 27:
break
cap.release()
cv2.destroyAllWindows()
동영상 처리 예제
cap = cv2.VideoCapture('video1.mp4')
fps = round(cap.get(cv2.CAP_PROP_FPS))
delay = round(1000/fps)
while True:
ret, frame = cap.read()
inversed = ~frame
cv2.imshow('frame', frame)
cv2.imshow('inversed', inversed)
if cv2.waitKey(delay) == 27:
break
cap.release()
cv2.destroyAllWindows()