자바스크립트를 활성화 해주세요

OpenCV 01: 파이썬에서 영상 기본 정보 불러오기 및 재생. (M1 애플 실리콘 로컬 환경에서)

 ·  ☕ 2 min read

실행환경

CPU: Apple Silicon M1
MacOS 12.0+
Python==3.9.5
OpenCV==4.7.0
Jupyter Lab==3.5.3


opencv란?

captured image of opencv website

사진과 영상을 처리하기 위한 라이브러리입니다. 터미널에서 pip install opencv 혹은 pip install opencv-python 등을 입력하면 내 파이썬 환경에서 쓸 준비가 됩니다.

불러올 영상들 (출처: Pixabay)

테스트를 위해 해상도가 다른 영상을 받았습니다! 영상 #1을 Tree.mp4, 영상 #2를 snow.mp4로 각각 다운로드와 데스크탑에 저장했습니다. 아래 함수는 맥의 다운로드와 데스크탑 경로를 기준으로 작성되었습니다.

1. 영상 불러오고 정보 출력하기 함수

2 clips. one for tree and one for snow

파일명만 입력되어 있으면 디폴트 경로에서 영상 파일을 불러오기, 파일명, 경로가 입력되면 그 디렉토리 안의 파일을 불러오는 코드입니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import cv2

def fileload(filename, path="/Users/user/Downloads/"):
    cap = cv2.VideoCapture(str(path) + str(filename))

    width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
    height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
    frames = cap.get(cv2.CAP_PROP_FRAME_COUNT)
    fps = cap.get(cv2.CAP_PROP_FPS)
    print(filename + "Info")
    print("width: ", width)
    print("height: ", height)
    print("frames: ", frames)
    print("fps: ", fps)
    return cap

(1) 디폴트 폴더에 있는 파일 불러오기

아래와 같이 파일명만 입력하면 “/Users/user/Downloads/“에 있는 파일을 불러옵니다. 만약 디폴트로 설정된 경로를 다른 곳으로 바꾸고 싶다면.. path="/Users/user/Downloads/“에 있는 부분을 다른 주소로 바꾸면 됩니다.

1
fileload("Tree.mp4")

Output:

Tree.mp4
width: 1280.0
height: 720.0
frames: 750.0
fps: 25.0

< cv2.VideoCapture 0x13c65b4b0>

(2) 바탕화면에 있는 파일 불러오기

바탕화면에 있는 snow.mp4 파일을 불러와 보겠습니다.

1
fileload("snow.mp4", "/Users/user/Desktop/")

Output:

snow.mp4
width: 640.0
height: 360.0
frames: 1129.0
fps: 25.0

< cv2.VideoCapture 0x13c65b5f0>

2. 영상 재생하기

재생하는 함수 play 를 정의합니다. cap에는 opencv를 통해서 불러온 비디오 파일을 넣어줍니다. 이 함수를 실행하면 영상의 마지막 프레임까지 재생한다는 뜻입니다.

ret, img = cap.read()부분에서 ret은 이미지가 있으면 True, 없으면 False로 반환됩니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
def play(cap):
    while cap.isOpened():
        ret, img = cap.read()

        if ret:
            imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        else:
            cap.release()
            break

        cv2.imshow("image", img)
        cv2.waitKey(1)
        cv2.destroyAllWindows()

혹시 재생이 안 되고 에러가 뜬다면.. cv2.waitKey(1)cv2.waitKey(0)으로 바꿔보세요.

MacOS 기준 창을 띄워서 재생하면 다른 작업을 할 수 없습니다 ㅠ
영상을 재생하는 부분은 cv2.imshow()이 부분입니다. 영상 재생을 하고 싶지 않다면! 마지막 세 줄(11번 - 13번 줄)을 주석처리하면 됩니다.

예시 1

바탕화면에 있는 snow.mp4를 a에 저장하고 그것을 재생해라.

1
2
a = fileload("snow.mp4", "/Users/user/Desktop/")
play(a)

이 코드를 실행하면 파이썬에서 a라는 변수에 저장되어있는 snow.mp4 영상을 새로운 창을 띄우고 재생합니다.

예시 2

1
play(fileload("snow.mp4", "/Users/user/Desktop/"))
공유하기

Suecream
글쓴이
Suecream
중요한 건 꺾여도 계속하는 마음