[스터디노트] OpenCV - 카메라와 동영상 처리

Hwan·2024년 2월 12일

OpenCV

목록 보기
10/15

카메라와 동영상 처리하기

(1) cv2.VideoCapture 클래스

  • OpenCV에서는 카메라와 동영상으로부터 프레임(frame)을 받아오는 작업을 cv2.VideoCapture 클래스 하나로 처리함
    • 프레임 : 동영상이나 카메라에서 연속되는 정지 영상 하나를 뜻함
  • OpenCV에서 VideoCapture로 카메라와 동영상을 한꺼번에 처리하는 이유는 좀 더 단순한 형태로 카메라와 동영상을 처리할 수 있는 인터페이스를 제공하기 위함

(2) 카메라 프레임 출력하기

  • 카메라 열기
  • 비디오 캡쳐 준비 확인
  • 프레임 받아오기
  • 카메라 처리 예제
import sys
import cv2

# 카메라 열기 방식 1
# cap = cv2.VideoCapture()
# cap.open(0)

# 카메라 열기 방식 2
cap = cv2.VideoCapture(0)

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

# 카메라 프레임 처리
while True:
    ret, frame = cap.read()

    if not ret:
        break

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('frame', frame)
    cv2.imshow('gray', gray)
    if cv2.waitKey(1) == 27:  # ESC
        break

cap.release()
cv2.destroyAllWindows()

(3) 동영상 프레임 출력하기

import sys
import cv2

cap = cv2.VideoCapture('./data/video1.mp4')

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

# 카메라 프레임 처리
while True:
    ret, frame = cap.read()

    if not ret:
        break

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('frame', frame)
    cv2.imshow('gray', gray)
    if cv2.waitKey(1) == 27:  # ESC
        break

cap.release()
cv2.destroyAllWindows()
  • 카메라, 비디오 장치 속성 값 참조

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

import sys
import cv2

# 카메라 열기 방식 1
# cap = cv2.VideoCapture()
# cap.open(0)

# 카메라 열기 방식 2
cap = cv2.VideoCapture('./data/video1.mp4')

if not cap.isOpened():
    print('Video 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)))
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

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('frame', frame)
    cv2.imshow('gray', gray)
    if cv2.waitKey(delay) == 27:  # ESC
        break

cap.release()
cv2.destroyAllWindows()

>>> Frame width :  1280
Frame height :  720
Frame count :  85
FPS :  24.0

(4) 동영상 저장하기

  • cv2.VideoWriter 클래스

    • OpenCV에서는 cv2.VideoWriter 클래스를 이용하여 일련의 프레임을 동영상 파일로 저장할 수 있음
    • 일련의 프레임은 모두 크기와 데이터 타입이 같아야 함
  • Fourcc(4-문자 코드, four character code)

    • 동영상 파일의 코덱, 압축 방식, 색상, 픽셀 포맷 등을 정의하는 정수 값
    • 주요 Fourcc 예시
  • 저장을 위한 동영상 파일 열기

  • 비디오 파일 준비 확인

  • 프레임 저장하기

  • 카메라 입력을 동영상 파일로 저장 예제

import sys
import cv2

cap = cv2.VideoCapture(0)

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

w = round(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
h = round(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)

fourcc = cv2.VideoWriter_fourcc(*'DIVX') # *'DIVX' == 'D', 'I' , 'V' , 'X'
delay = round(1000 / fps)

out = cv2.VideoWriter('output.avi', fourcc, fps, (w,h))

if not out.isOpened():
    print('File open failed')
    cap.release()
    sys.exit()

while True:
    ret, frame = cap.read()

    if not ret:
        break

    # gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    out.write(frame)

    cv2.imshow('frame', frame)
    # cv2.imshow('gray', gray)

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

cap.release()
out.release()
cv2.destroyAllWindows()
profile
Hi.

0개의 댓글