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

빨주노·2021년 8월 6일
0

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에는 True,
    # frame에는 해당 프레임이 저장됨
    ret, frame = cap.read()
    
    if not ret:
    	break
    
    # 현재 프레임 반전
    inversed = ~frame
    
    cv2.imshow('frame', frame)
    cv2.imshow('inversed', inversed)
    
    # 일정 시간 기다린 후 다음 프레임 처리.
    # 만약 ESC 키를 누르면 while 루프 종료
    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) # 한 frame과 다음 frame 사이의 시간 간격을 계산

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()

profile
딥 하게 딥러닝 하는중

0개의 댓글