Python/OpenCV

OpenCV로 동영상 불러오기 및 재생 (cv2.VideoCapture())

임베디드 친구 2025. 10. 30. 21:28
반응형

OpenCV로 동영상 불러오기 및 재생 (cv2.VideoCapture())

1. 개요

OpenCV는 이미지뿐만 아니라 동영상도 처리할 수 있는 강력한 기능을 제공합니다. OpenCV의 cv2.VideoCapture() 함수를 이용하면 비디오 파일을 읽어오거나 웹캠에서 실시간 영상을 캡처할 수 있습니다. 이번 포스팅에서는 OpenCV를 활용하여 동영상을 불러오고 재생하는 방법을 설명하겠습니다.


2. OpenCV에서 동영상 불러오기

cv2.VideoCapture()를 사용하면 다양한 방식으로 동영상을 불러올 수 있습니다. 일반적으로 두 가지 방법이 있습니다.

  1. 비디오 파일을 불러오기: 로컬에 저장된 동영상 파일을 읽어옵니다.
  2. 웹캠을 이용한 실시간 영상 불러오기: 웹캠에서 실시간으로 영상을 받아옵니다.

cv2.VideoCapture()의 주요 인자는 다음과 같습니다.

  • cv2.VideoCapture(파일 경로 또는 장치 번호)
    • 파일 경로를 입력하면 해당 비디오 파일을 불러옵니다.
    • 장치 번호(보통 0 또는 1)를 입력하면 해당 번호의 웹캠을 사용합니다.

다음은 기본적인 비디오 불러오기 예제입니다.

import cv2

# 동영상 파일 불러오기
video_path = "video.mp4"
cap = cv2.VideoCapture(video_path)

if not cap.isOpened():
    print("동영상을 열 수 없습니다.")
    exit()

while True:
    ret, frame = cap.read()
    if not ret:
        print("동영상 재생이 끝났거나 프레임을 불러올 수 없습니다.")
        break

    cv2.imshow("Video", frame)
    if cv2.waitKey(25) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

위 코드는 OpenCV를 이용하여 비디오 파일을 불러와 재생하는 기본적인 코드입니다.


3. 웹캠을 이용한 실시간 영상 불러오기

cv2.VideoCapture(0)을 사용하면 기본 웹캠에서 영상을 받아올 수 있습니다. 다음은 웹캠을 활용한 실시간 영상 출력 코드입니다.

import cv2

# 웹캠 열기 (0: 기본 웹캠)
cap = cv2.VideoCapture(0)

if not cap.isOpened():
    print("웹캠을 열 수 없습니다.")
    exit()

while True:
    ret, frame = cap.read()
    if not ret:
        print("프레임을 받아올 수 없습니다.")
        break

    cv2.imshow("Webcam", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

위 코드에서는 cv2.VideoCapture(0)을 사용하여 기본 웹캠을 열고, 실시간으로 영상을 화면에 출력합니다.


4. 동영상 재생 속도 조절

비디오 파일을 재생할 때 cv2.waitKey() 함수의 값을 조정하면 속도를 변경할 수 있습니다.

  • cv2.waitKey(25): 약 25ms마다 새로운 프레임을 표시 (초당 40프레임)
  • cv2.waitKey(10): 빠르게 재생 (초당 100프레임)
  • cv2.waitKey(33): 느리게 재생 (초당 30프레임)

만약 프레임 속도를 동영상 원본과 동일하게 맞추고 싶다면, cv2.VideoCapture.get()을 이용하여 프레임 속도를 읽어올 수 있습니다.

fps = cap.get(cv2.CAP_PROP_FPS)  # 초당 프레임 수
frame_delay = int(1000 / fps)    # 적절한 대기 시간 계산
cv2.waitKey(frame_delay)

5. 동영상의 속성 정보 가져오기

OpenCV는 cv2.VideoCapture.get()을 사용하여 동영상의 다양한 속성 정보를 가져올 수 있습니다.

import cv2

video_path = "video.mp4"
cap = cv2.VideoCapture(video_path)

if not cap.isOpened():
    print("동영상을 열 수 없습니다.")
    exit()

# 동영상 속성 가져오기
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))  # 가로 해상도
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 세로 해상도
fps = cap.get(cv2.CAP_PROP_FPS)  # 초당 프레임 수
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))  # 총 프레임 수

print(f"해상도: {width}x{height}, FPS: {fps}, 총 프레임 수: {frame_count}")

cap.release()

위 코드를 실행하면 동영상의 해상도, FPS, 총 프레임 수 등의 정보를 출력할 수 있습니다.


6. 비디오 저장하기

cv2.VideoWriter()를 사용하면 OpenCV에서 처리한 영상을 저장할 수 있습니다. 간단한 예제는 다음과 같습니다.

import cv2

cap = cv2.VideoCapture(0)

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    out.write(frame)  # 프레임 저장
    cv2.imshow('Recording', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

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

위 코드에서는 웹캠에서 받아온 영상을 'output.avi' 파일로 저장합니다.


7. 정리

이번 포스팅에서는 OpenCV를 활용하여 동영상을 불러오고 재생하는 방법을 설명하였습니다.

  1. cv2.VideoCapture()를 사용하여 동영상을 불러올 수 있습니다.
  2. 웹캠을 이용한 실시간 영상도 처리할 수 있습니다.
  3. cv2.waitKey()를 조정하여 재생 속도를 조절할 수 있습니다.
  4. cv2.VideoCapture.get()을 활용하면 동영상의 속성 정보를 가져올 수 있습니다.
  5. cv2.VideoWriter()를 이용하여 동영상을 저장할 수도 있습니다.

이제 OpenCV를 활용하여 다양한 영상 처리 작업을 수행할 수 있을 것입니다.

반응형