본문 바로가기
프로그래밍/PYTHON

[Python]파이썬_Tkinter_동영상재생(OpenCV, Tkinter, 웹캠)

by 루티즈 2020. 7. 29.
반응형

1. OpenCV + UVC 동영상 재생

 cap = cv2.VideoCapture(2)

 if (cap.isOpened() == False):
        print("Unable to read camera feed")

 while True:
        ret, color = cap.read()
        if (color != []):
            cv2.imshow('uvc', color)
            image = cv2.cvtColor(color, cv2.COLOR_BGR2RGB)
           
            cv2.waitKey(1)

ViedeoCapture : 웹캠(UVC) 카메라 Opencv 연결 클래스 (2)는 UVC 카메라 번호.

cvtColor : BGR2RGB 색반전, 자료형과 Opencv 형식이 색반전되어 있으므로 함수로 색반전.

2. OpenCV + 일반 동영상(avi, mp4 등) 재생

# test 동영상 경로.
aviPath = '1.mp4'

cap = cv2.VideoCapture(aviPath)

 if (cap.isOpened() == False):
        print("Unable to read camera feed")

 while True:
        ret, color = cap.read()
        if (color != []):
            cv2.imshow('mp4', color)
            cv2.waitKey(1)

aviPath : 동영상 경로 ( 코드와 같은 경로에 동영상 파일 존재 )

3. OpenCV + tkinter label

from PIL import Image
from PIL import ImageTk
import tkinter as tk
import threading
import datetime
import cv2
import os

def camThread():
    color = []
    cap = cv2.VideoCapture(2)
    panel = None

    if (cap.isOpened() == False):
        print("Unable to read camera feed")

    while True:
        ret, color = cap.read()
        if (color != []):
            cv2.imshow('uvc', color)
            image = cv2.cvtColor(color, cv2.COLOR_BGR2RGB)
            image = Image.fromarray(image)
            image = ImageTk.PhotoImage(image)

            if panel is None:
                panel = tk.Label(image=image)
                panel.image = image
                panel.pack(side="left")
            else:
                panel.configure(image=image)
                panel.image = image

            cv2.waitKey(1)

if __name__ == '__main__':

    thread_img = threading.Thread(target=camThread, args=())
    thread_img.daemon = True
    thread_img.start()

    root = tk.Tk()
    root.mainloop()



https://rootiel.tistory.com/31 와 같이 OpencvMat 을 imageTK 자료형으로 변경하여 tkinter panel 에 탑재.

panel 라벨에 계속해서 이미지 변경을 반영해야 하므로 image capture 반복을 thread 로 프로그램을 진행시킨다.

 

 

[Python]파이썬_OpencvMat_Tkinter 연결

파이썬에서 Opnecv Mat 은 ndarray 형식으로 표현된다. 따라서 Tkinter ( python 단순 GUI 라이브러리 )에 집어넣기 위해서는 Tkinter에서 사용하는 이미지 형식으로 변환 후 이미지를 삽입한다. im = Image.fro.

rootiel.tistory.com

 

 

동영상

 

반응형