상세 컨텐츠

본문 제목

카메라와 동영상 처리하기 1

영상처리/OpenCV Python

by cepiloth 2021. 5. 12. 18:12

본문

728x90
반응형

cv2.VideoCapture 클래스

• OpenCV에서는 카메라와 동영상으로부터 프레임(frame)을 받아오는 작업을 cv2.VideoCapture 클래스 하나로 처리함

 

카메라 열기

• index: camera_id + domain_offset_id 시스템 기본 카메라를 기본 방법으로 열려면 index에 0을 전달
• apiPreference: 선호하는 카메라 처리 방법을 지정
• retval: cv2.VideoCapture 객체

cv2.VideoCapture(index, apiPreference=None) -> retval

 

• retval: 성공하면 True, 실패하면 False.

cv2.VideoCapture.open(index, apiPreference=None) -> retval

 

동영상, 정지 영상 시퀀스, 비디오 스트림 열기

• filename: 비디오 파일 이름, 정지 영상 시퀀스, 비디오 스트림 URL 등
(e.g) 'video.avi', 'img_%02d.jpg', 'protocol://host:port/script?params|auth'
• apiPreference: 선호하는 동영상 처리 방법을 지정
• retval: cv2.VideoCapture 객체

cv2.VideoCapture(filename, apiPreference=None) -> retval

 

• retval: 성공하면 True, 실패하면 False.

cv2.VideoCapture.open(filename, apiPreference=None) -> retval

 

비디오 캡쳐가 준비되었는지 확인

• retval: 성공하면 True, 실패하면 False.

• retval: 성공하면 True, 실패하면 False.

 

• retval: 성공하면 True, 실패하면 False.
• image: 현재 프레임 (numpy.ndarray)

cv2.VideoCapture.read(image=None) -> retval, image

 

카메라, 비디오 장치 속성 값 참조

propId: 속성 상수. (OpenCV 문서 참조)
• retval: 성공하면 해당 속성 값, 실패하면 0.

cv2.VideoCapture.get(propId) -> retval

 

카메라, 비디오 장치 속성 값 참조

• propId: 속성 상수
• value: 속성 값
• retval: 성공하면 True, 실패하면 False

cv2.VideoCapture.set(propId, value) -> retval

 

카메라 처리 예제

import sys
import cv2


# 기본 카메라 열기
cap = cv2.VideoCapture(0)

if not cap.isOpened():
    print("Camera open failed!")
    sys.exit()

# 카메라 프레임 크기 출력
print('Frame width:', int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)))
print('Frame height:', int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))

# 카메라 프레임 처리
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()

 

동영상 처리 예제

import sys
import cv2


# 비디오 파일 열기
cap = cv2.VideoCapture('video1.mp4')

if not cap.isOpened():
    print("Video open failed!")
    sys.exit()

# 비디오 프레임 크기, 전체 프레임수, FPS 등 출력
print('Frame width:', int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)))
print('Frame height:', int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print('Frame count:', int(cap.get(cv2.CAP_PROP_FRAME_COUNT)))

fps = cap.get(cv2.CAP_PROP_FPS)
print('FPS:', fps)

delay = round(1000 / fps)

# 비디오 매 프레임 처리
while True:
    ret, frame = cap.read()

    if not ret:
        break

    inversed = ~frame  # 반전

    cv2.imshow('frame', frame)
    cv2.imshow('inversed', inversed)

    if cv2.waitKey(delay) == 27:
        break

cap.release()
cv2.destroyAllWindows()

 

728x90
반응형

관련글 더보기

댓글 영역