[파이썬] opencv-python 비디오 처리 기본

OpenCV-Python은 영상 및 비디오 처리를 위한 강력한 라이브러리입니다. 이 문서에서는 OpenCV-Python을 사용하여 비디오를 처리하는 기본적인 작업들에 대해 알아보겠습니다. 비디오의 프레임 추출, 크기 조정, 그레이스케일 변환 및 비디오 저장 등에 대해서 다룰 예정입니다.

비디오 파일 열기

비디오 파일을 열기 위해 OpenCV의 cv2.VideoCapture() 함수를 사용합니다. 이 함수는 비디오 파일 경로를 인수로 받습니다. 예를 들어, video.mp4라는 비디오 파일을 열려면 다음과 같이 코드를 작성할 수 있습니다:

import cv2

cap = cv2.VideoCapture('video.mp4')

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

    if not ret:
        break

    # 프레임 처리 코드 작성

cap.release()
cv2.destroyAllWindows()

프레임 추출

비디오 프레임을 추출하기 위해서는 cap.read()를 사용하여 프레임을 읽어와야 합니다. cap.read() 함수는 두 개의 값, 즉 retframe을 반환합니다. ret은 프레임을 읽을 수 있는지 여부를 나타내는 불리언 값이며, frame은 실제로 읽어온 프레임 자체입니다.

다음은 간단한 예제 코드로서 비디오에서 프레임을 추출하여 화면에 출력하는 예입니다:

import cv2

cap = cv2.VideoCapture('video.mp4')

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

    if not ret:
        break

    cv2.imshow('Frame', frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

프레임 크기 조정

프레임의 크기를 조정하여 비디오 처리를 할 수 있습니다. 이를 위해 cv2.resize() 함수를 사용합니다. cv2.resize() 함수는 3개의 인수를 받습니다: 원본 이미지(frame), 원하는 크기((width, height)), 그리고 보간(interpolation) 방법입니다.

다음은 프레임의 크기를 절반으로 줄이는 예제 코드입니다:

import cv2

cap = cv2.VideoCapture('video.mp4')

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

    if not ret:
        break

    resized_frame = cv2.resize(frame, (0, 0), fx=0.5, fy=0.5)

    cv2.imshow('Resized Frame', resized_frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

그레이스케일 변환

프레임을 그레이스케일로 변환하려면 cv2.cvtColor() 함수를 사용합니다. 이 함수는 원본 이미지(frame) 및 변환할 색상 공간(cv2.COLOR_BGR2GRAY)을 인수로 받습니다.

다음은 프레임을 그레이스케일로 변환하는 예제 코드입니다:

import cv2

cap = cv2.VideoCapture('video.mp4')

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

    if not ret:
        break

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

    cv2.imshow('Grayscale Frame', gray_frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

비디오 저장

처리한 비디오를 저장하려면 cv2.VideoWriter() 함수를 사용합니다. 이 함수는 저장할 파일 경로(output.mp4)와 코덱(cv2.VideoWriter_fourcc('M','J','P','G')), 프레임 속도(fps), 프레임 크기 등의 인수를 받습니다.

다음은 처리한 비디오를 저장하는 예제 코드입니다:

import cv2

cap = cv2.VideoCapture('video.mp4')
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('output.mp4', fourcc, fps, (width, height))

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

    if not ret:
        break

    # 비디오 처리 코드 작성

    out.write(frame)

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

결론

이번 포스트에서는 OpenCV-Python을 사용하여 비디오 처리의 기본적인 작업들을 살펴보았습니다. 프레임 추출, 크기 조정, 그레이스케일 변환 및 비디오 저장 등의 작업을 수행할 수 있습니다. 이러한 기본적인 작업을 활용하여 더 복잡한 비디오 처리 알고리즘을 개발할 수 있습니다. OpenCV-Python의 다양한 기능을 적절히 활용하여 비디오 처리에 창의성을 발휘해보세요!