OpenCV 강좌, 파일로 이미지 및 비디오 저장하기

OpenCV는 컴퓨터 비전과 이미지 처리에 있어서 가장 인기 있는 라이브러리 중 하나입니다.
이 강좌에서는 OpenCV를 사용하여 파일로 이미지를 저장하고 비디오를 저장하는 방법에 대해 상세히 설명하고 예제 코드를 제공합니다.
이 과정에서 파일 포맷 및 다양한 저장 옵션에 대해서도 알아보겠습니다.

1. OpenCV 소개

OpenCV(Open Source Computer Vision Library)는 실시간 컴퓨터 비전에 특화된 라이브러리로, 이미지 및 비디오 처리의 많은 기능을 제공합니다.
이미지 및 비디오 파일을 저장하는 기능은 OpenCV의 핵심 기능 중 하나입니다. 이 강좌를 통해 OpenCV를 설치하고 사용하는 방법을 알아볼 것입니다.

2. OpenCV 설치하기

OpenCV는 다양한 플랫폼에서 지원되며, Python에서 사용하기 위해 설치하는 방법은 다음과 같습니다.
pip 패키지 관리자를 사용하여 간단하게 설치할 수 있습니다.

pip install opencv-python

설치가 완료되면 Python 코드에서 OpenCV를 사용할 준비가 됩니다.
아래와 같이 설치 여부를 간단히 확인할 수 있습니다.

python
import cv2
print(cv2.__version__)

3. 이미지 저장하기

OpenCV를 사용하여 이미지를 파일로 저장하는 것은 매우 간단합니다.
주로 사용할 수 있는 함수는 cv2.imwrite()입니다. 이 함수는 저장할 파일 이름과 이미지 데이터를 인자로 받습니다.

3.1 기본 이미지 저장 예제

아래 예제는 간단한 이미지를 생성한 후, cv2.imwrite()를 사용하여 파일로 저장하는 코드입니다.

python
import cv2
import numpy as np

# 이미지 생성 (검은 배경의 흰색 사각형)
image = np.zeros((300, 300, 3), dtype='uint8')
image[:] = [255, 255, 255]  # 흰색으로 채우기

# 이미지 저장
cv2.imwrite('white_square.png', image)
print("이미지 저장 완료: white_square.png")

위 코드를 실행하면 현재 디렉토리에 “white_square.png”라는 이름의 이미지 파일이 저장됩니다.

3.2 다양한 파일 포맷

OpenCV는 다양한 이미지 포맷을 지원합니다. 대표적으로 PNG, JPG, BMP, TIFF 등이 있습니다.
파일 포맷에 따라 이미지를 저장할 때, 확장자만 변경하면 됩니다. 예를 들어, JPG 포맷으로 저장하려면 다음과 같습니다.

python
cv2.imwrite('white_square.jpg', image)

4. 비디오 저장하기

비디오를 저장할 때는 cv2.VideoWriter 클래스를 사용합니다.
이 클래스는 비디오 파일을 생성하고, 각 프레임을 추가하는 함수 write()를 제공합니다.

4.1 비디오 작성 기본 예제

아래 예제는 기본 비디오를 작성하는 코드입니다.
검은 배경에서 흰색 사각형이 움직이는 비디오를 생성하고 저장합니다.

python
# 비디오 작성기 설정
fourcc = cv2.VideoWriter_fourcc(*'XVID')  # 코덱 지정
video_out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))

for i in range(100):
    # 프레임 생성 (검은 배경)
    frame = np.zeros((480, 640, 3), dtype='uint8')
    
    # 사각형의 좌표를 변경하여 이동 효과 추가
    cv2.rectangle(frame, (i * 5, 100), (i * 5 + 100, 200), (255, 255, 255), -1)
    
    # 프레임 추가
    video_out.write(frame)

# 리소스 해제
video_out.release()
print("비디오 저장 완료: output.avi")

4.2 비디오 포맷 및 속성 설정

cv2.VideoWriter_fourcc()를 사용하여 비디오 코덱을 설정할 수 있습니다. 다음과 같은 코덱을 사용할 수 있습니다.

  • XVID
  • X263
  • MJPG
  • MP4V

두 번째 인자는 초당 프레임 수(FPS)이며, 세 번째 인자는 비디오 프레임의 해상도입니다.
예를 들어, 고해상도 비디오를 원한다면 해상도를 (1920, 1080)으로 설정할 수 있습니다.

4.3 비디오 촬영 후 저장하기

웹캠에서 촬영한 비디오를 실시간으로 저장할 수도 있습니다.
아래 코드는 웹캠의 비디오를 녹화하여 파일로 저장하는 예제입니다.

python
cap = cv2.VideoCapture(0)  # 웹캠 열기
video_out = cv2.VideoWriter('webcam_output.avi', fourcc, 20.0, (640, 480))

while True:
    ret, frame = cap.read()
    if not ret:
        break
    
    video_out.write(frame)  # 프레임 저장
    cv2.imshow('frame', frame)  # 웹캠 프레임 표시

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break  # 'q' 키 입력 시 종료

# 리소스 해제
cap.release()
video_out.release()
cv2.destroyAllWindows()

5. 이미지 및 비디오 저장할 때 주의사항

이미지를 저장할 때 주의해야 할 점은 파일 경로와 파일 권한입니다.
지정한 경로에 쓰기 권한이 없다면 이미지나 비디오를 저장하는 데 실패할 수 있습니다.
또한, 이미지를 저장하기 전에 이미지가 올바르게 로드되었는지도 확인해야 합니다.

5.1 디렉토리 체크

저장할 디렉토리가 존재하는지 확인하고, 만약 없다면 디렉토리를 생성하는 방법도 구현할 수 있습니다.

python
import os

# 디렉토리 체크 및 생성
output_dir = 'output_images'
if not os.path.exists(output_dir):
    os.makedirs(output_dir)

# 이미지 저장
cv2.imwrite(os.path.join(output_dir, 'image.png'), image)

5.2 파일 형식 확인

사용자가 입력하는 파일 이름에 따라 적절한 파일 형식을 보장하기 위해 입력 검증을 하는 것도 좋습니다.
예를 들어, 이미지 파일 확장자가 없거나 잘못된 경우 사용자에게 알림을 줄 수 있습니다.

6. 마무리

이번 강좌에서는 OpenCV를 사용하여 이미지 및 비디오를 파일로 저장하는 법에 대해 알아보았습니다.
OpenCV는 매우 강력한 기능을 가지며, 다양한 이미지 및 비디오 처리 작업을 수행할 수 있습니다.
이러한 기본적인 파일 저장 기능을 익히면 앞으로 더 많은 OpenCV 기능을 활용할 수 있을 것입니다.

OpenCV를 배우는 과정에서는 다양한 프로젝트를 통해 실력을 쌓는 것이 중요합니다.
여러분이 직접 이미지를 저장해 보고, 비디오를 만들어 보는 과정에서 많은 것을 배울 수 있을 것입니다.
감사합니다!