[OPencv] opencv를 이용한 python project(이미지 슬라이드쇼 만들기)

업데이트:

1. 이미지 슬라이드 쇼 개요

특정 폴더에 있는 모든 이미지 파일을 슬라이드 쇼로 만들기

구현 기능

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

2. 관련 함수 패키지 및 함수에 대해 알아보기

os.listdir()

# 예시 - os
import os

file_list = os.listdir('.\\images')
img files = [file or file in file_list if file.endswith('.jpg')]

모든 파일 목록을 불러올 수 있고 그 중에서 jpg로 되어 있는 파일만 찾아서 불러올 수 있다. glob.glob()

# 예시 - glob
import glob

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

glob 패키지는 특정 패턴의 문자열 이름을 다 불러올 수 있다. 위와 같이 images 폴더에 있는 파일들을 불러와도 되지만 현재 파일이 있는 곳에 images라는 폴더를 냅두지 않고 저처럼 assets이라는 폴더안에 모든 그림파일들을 넣어두었다면 glob.glob(‘assets/images/*.jpg’) 이렇게 바꿔주면 된다.

3.코드 구현하기

3-1.images 폴더안에 있는 파일명들 확인하기

import glob

# 현재 python 파일이 있는 위치에 images 폴더를 옮겨놓은 경우 위 예시처럼 바꿔주어야 함
img_files = glob.glob('assets/images/*.jpg')

for f in img_files:
    print(f) 

그럼 다음과 같이 images 안에 있는 파일명들이 나열된 것을 확인할 수 있다.

3-2.전체 화면 영상 출력 창 만들기

cv2.nameWindow('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)

  if cv2.waitKey(1000) == 27:    #ESC
    break
  idx+=1
  if idx>=cnt:
    idx=0
cv2.destroyALLWindows()
  • 먼저 cv2.WINDOW_NORMAL 속성의 창을 만들고 cv2.setWindowProperty() 함수를 사용하여 전체 화면 속성으로 바꿔준다.
  • 그 뒤에 img 를 while 문에서 불러와서 ESC 키(27)를 누르기 전까지 반복적으로 사진을 imread 하면 끝!

댓글남기기