[OpenCV] OpenCV를 이용한 Python Project (이미지 슬라이드쇼 만들기)

업데이트:

OpenCV를 이용한 Python Project (이미지 슬라이드쇼 만들기)

개요

이번 프로젝트에서는 특정 폴더에 있는 모든 이미지 파일을 활용하여 간단한 이미지 슬라이드쇼를 구현합니다.


1. 프로젝트 개요

구현 기능

  1. 특정 폴더에 있는 이미지 파일 목록 읽기.
  2. 이미지를 전체 화면으로 출력하기.
  3. 일정 시간 동안 이미지를 화면에 출력 후 다음 이미지로 교체하기 (무한 루프 형식).

2. 관련 패키지 및 함수

2.1 os.listdir()

  • 폴더 내 모든 파일 목록 불러오기
  • 특정 확장자(.jpg 등)를 가진 파일만 필터링 가능.
import os

file_list = os.listdir('./images')
img_files = [file for file in file_list if file.endswith('.jpg')]

2.2 glob.glob()

  • 특정 패턴의 파일 이름 불러오기
  • 원하는 경로와 파일 형식을 지정하여 간단하게 파일 목록 생성 가능.
import glob

img_files = glob.glob('./images/*.jpg')

예시

  • 현재 파일 경로와 다른 디렉토리에 이미지 파일이 있는 경우:
    img_files = glob.glob('assets/images/*.jpg')
    

3. 코드 구현

3.1 이미지 파일명 확인

glob를 사용하여 이미지 파일 경로를 읽어온 후, 파일명을 출력합니다.

import glob

# assets 폴더 내 images 디렉토리에서 모든 JPG 파일 읽기
img_files = glob.glob('assets/images/*.jpg')

for f in img_files:
    print(f)

실행 결과

아래와 같이 images 폴더 내 파일명이 출력됩니다.


3.2 전체 화면 출력 창 만들기

cv2.namedWindowcv2.setWindowProperty를 사용하여 전체 화면을 구현합니다.

import cv2
import glob

# 이미지 파일 읽기
img_files = glob.glob('assets/images/*.jpg')

cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.setWindowProperty('image', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)

cnt = len(img_files)  # 이미지 파일 개수
idx = 0

while True:
    img = cv2.imread(img_files[idx])  # 이미지 읽기
    cv2.imshow('image', img)

    # ESC 키를 누르면 종료
    if cv2.waitKey(1000) == 27:  
        break

    idx += 1
    if idx >= cnt:
        idx = 0

cv2.destroyAllWindows()

코드 설명

  1. 창 속성 설정:
    • cv2.WINDOW_NORMAL: 창 크기를 조정 가능하도록 설정.
    • cv2.WINDOW_FULLSCREEN: 창을 전체 화면으로 변경.
  2. 이미지 출력:
    • cv2.imshow()로 이미지를 출력.
    • 이미지 파일 리스트를 반복적으로 순회하며 슬라이드쇼 구현.
  3. 키 입력 처리:
    • cv2.waitKey(1000): 1초(1000ms) 동안 키 입력 대기.
    • ESC 키(27)를 누르면 반복문 종료.

4. 결과

  • 슬라이드쇼가 실행되며, 설정한 시간 간격으로 이미지를 전환합니다.
  • ESC 키를 누르면 프로그램이 종료됩니다.

결론

이번 포스팅에서는 OpenCV와 Python을 사용해 간단한 이미지 슬라이드쇼를 구현했습니다.
이미지 파일을 동적으로 읽고 전체 화면으로 출력하는 이 방법을 응용해 더욱 다양한 프로젝트를 시도해보세요!

댓글남기기