首页 > 解决方案 > 在 Tkinter 标签内循环 OpenCV 图像 - 使用 esp32-cam

问题描述

这是一个循环理解问题,我是 Tkinter 新手,我不知道图像是如何更新的

°°°问题°°°

它是关于制作一个程序来捕获esp32-cam模块的图像,除了在Tkinter中显示图像以制作用户界面外,还可以将它们可视化并与urllibOpencv库一起使用

图像正确更新,但如图所示向下滚动

我希望你能帮助我解决这个问题以及如何将它锚定在我想要的位置,使用函数 .place (x = 0, y = 0) 进出循环,但图像没有更新

°°°图像°°°

启动程序,图像在 Tkinter 窗口中居中,这很好。 第一次捕获

当图像在500毫秒刷新时,图像“无限”向下滚动,如下图所示: 秒捕获

#Python v3.8.4

import tkinter as * 
from PIL import Image, ImageTk
import cv2
import numpy as np
import urllib.request

url='http://192.168.0.24/picture'
delay = 1000

imgtk = [None]

def loopCapture():
    imgResponse = urllib.request.urlopen (url)
    imgNp =np.array(bytearray(imgResponse.read()),dtype=np.uint8)
    image = cv2.imdecode (imgNp, -1)

    b,g,r = cv2.split(image)
    img = cv2.merge((r,g,b))
    im = Image.fromarray(img)
    imgtk[0] = ImageTk.PhotoImage(image = im)
    capture = Label(root, image = imgtk[0]).pack()
    root.after(delay, loopCapture)

root = Tk()
root.geometry("1200x700")
loopCapture()
root.mainloop()

标签: python-3.xopencvtkinterurllib

解决方案


我只需要了解更多关于 tkinter 库的信息,但是如果有人遇到同样的问题,这里是代码:

运行程序时捕获。 在此处输入图像描述

from PIL import Image, ImageTk
import urllib.request
import tkinter as tk
import numpy as np
import cv2

# esp32-cam url 
urlCam ='http://192.168.0.24/picture' 

panel = None
root = None

def loopCamera():
    imgResponse = urllib.request.urlopen (urlCam)
    imgNp = np.array(bytearray(imgResponse.read()),dtype=np.uint8)
    image = cv2.imdecode (imgNp, -1)

    b,g,r = cv2.split(image)
    img = cv2.merge((r,g,b))
    
    im = Image.fromarray(img)
    imgtk = ImageTk.PhotoImage(image = im)
    
    panel.configure(image = imgtk)
    panel.image = imgtk
    panel.after(5, loopCamera)

root = tk.Tk()
root.title('car-vision')
root.geometry('1000x600')

panel = tk.Label(root)
panel.pack()
loopCamera()
root.mainloop()

推荐阅读