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()
함수는 두 개의 값, 즉 ret
과 frame
을 반환합니다. 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의 다양한 기능을 적절히 활용하여 비디오 처리에 창의성을 발휘해보세요!