尝试使用 opencv 和 tkinter 用按钮关闭相机
Trying to close the camera with a button using opencv and tkinter
我有它,所以相机链接到第一个按钮,当你点击它时,它应该打开相机。我还试图创建另一个按钮,当您单击该按钮时,它将关闭相机。那应该如何工作?我正在使用 opencv、tkinter 和 PIL。
这是我的代码
import cv2
import numpy as np
from time import sleep
from tkinter import *
from PIL import Image
from PIL import ImageTk
white = "#ffffff"
lightBlue2 = "#adc5ed"
font = "Constantia"
WIDTH = 1920
HEIGHT = 1080
fontButtons = (font, 12)
maxWidth = 1000
maxHeight = 600
mainWindow = Tk()
mainWindow.title('RocketShip')
mainWindow.configure(width = WIDTH, height = HEIGHT, bg="black")
mainFrame = Frame(mainWindow, height = 640, width = 810)
mainFrame.place(x=350,y=0)
cameraFrame = Frame(mainWindow, height = 640, width = 405)
cameraFrame.place(x = 0, y = 0)
lmain = Label(mainFrame)
cap = cv2.VideoCapture(0)
def show_frame():
lmain = Label(mainFrame)
ret, frame = cap.read()
cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img = Image.fromarray(cv2image).resize((810,640))
imgtk = ImageTk.PhotoImage(image=img)
lmain.grid(row=0, column=0)
lmain.grid(row=0, column=0)
lmain.imgtk = imgtk
lmain.configure(image=imgtk)
lmain.after(10, show_frame)
#Buttons
TurnCameraOn = Button(cameraFrame, width = 405, height = 25, bg = "blue", command = show_frame)
TurnCameraOn.place(x = 0, y = 0)
TurnCameraOff = Button(cameraFrame, width = 405, height = 25, bg = "blue")
TurnCameraOff.place(x = 0, y = 300)
#file menu
menubar = Menu(mainWindow)
file = Menu(menubar, tearoff = 0)
menubar.add_cascade(label ='Commands', menu = file)
file.add_command(label ='Open Camera', command = show_frame)
file.add_separator()
file.add_command(label ='Exit', command = lambda:mainWindow.destroy())
mainWindow.config(menu = menubar)
mainWindow.mainloop()
您可以使用旗帜。当你想要相机启动时将标志设置为True
,当你想要停止循环时将其设置为False
,然后使用VideoCapture.release()
关闭捕获设备。
这是一个例子
import cv2
from tkinter import *
from PIL import Image, ImageTk
cam_on = False
cap = None
mainWindow = Tk()
mainFrame = Frame(mainWindow, height = 640, width = 810)
mainFrame.place(x=350,y=0)
cameraFrame = Frame(mainWindow, height = 640, width = 405)
cameraFrame.place(x = 0, y = 0)
def show_frame():
if cam_on:
ret, frame = cap.read()
if ret:
cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img = Image.fromarray(cv2image).resize((810,640))
imgtk = ImageTk.PhotoImage(image=img)
vid_lbl.imgtk = imgtk
vid_lbl.configure(image=imgtk)
vid_lbl.after(10, show_frame)
def start_vid():
global cam_on, cap
stop_vid()
cam_on = True
cap = cv2.VideoCapture(0)
show_frame()
def stop_vid():
global cam_on
cam_on = False
if cap:
cap.release()
vid_lbl = Label(mainFrame)
vid_lbl.grid(row=0, column=0)
#Buttons
TurnCameraOn = Button(cameraFrame, text="start Video", bg = "blue", command=start_vid)
TurnCameraOn.place(x = 0, y = 0)
TurnCameraOff = Button(cameraFrame, text="stop Video", bg = "blue", command=stop_vid)
TurnCameraOff.place(x = 0, y = 300)
mainWindow.mainloop()
我有它,所以相机链接到第一个按钮,当你点击它时,它应该打开相机。我还试图创建另一个按钮,当您单击该按钮时,它将关闭相机。那应该如何工作?我正在使用 opencv、tkinter 和 PIL。
这是我的代码
import cv2
import numpy as np
from time import sleep
from tkinter import *
from PIL import Image
from PIL import ImageTk
white = "#ffffff"
lightBlue2 = "#adc5ed"
font = "Constantia"
WIDTH = 1920
HEIGHT = 1080
fontButtons = (font, 12)
maxWidth = 1000
maxHeight = 600
mainWindow = Tk()
mainWindow.title('RocketShip')
mainWindow.configure(width = WIDTH, height = HEIGHT, bg="black")
mainFrame = Frame(mainWindow, height = 640, width = 810)
mainFrame.place(x=350,y=0)
cameraFrame = Frame(mainWindow, height = 640, width = 405)
cameraFrame.place(x = 0, y = 0)
lmain = Label(mainFrame)
cap = cv2.VideoCapture(0)
def show_frame():
lmain = Label(mainFrame)
ret, frame = cap.read()
cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img = Image.fromarray(cv2image).resize((810,640))
imgtk = ImageTk.PhotoImage(image=img)
lmain.grid(row=0, column=0)
lmain.grid(row=0, column=0)
lmain.imgtk = imgtk
lmain.configure(image=imgtk)
lmain.after(10, show_frame)
#Buttons
TurnCameraOn = Button(cameraFrame, width = 405, height = 25, bg = "blue", command = show_frame)
TurnCameraOn.place(x = 0, y = 0)
TurnCameraOff = Button(cameraFrame, width = 405, height = 25, bg = "blue")
TurnCameraOff.place(x = 0, y = 300)
#file menu
menubar = Menu(mainWindow)
file = Menu(menubar, tearoff = 0)
menubar.add_cascade(label ='Commands', menu = file)
file.add_command(label ='Open Camera', command = show_frame)
file.add_separator()
file.add_command(label ='Exit', command = lambda:mainWindow.destroy())
mainWindow.config(menu = menubar)
mainWindow.mainloop()
您可以使用旗帜。当你想要相机启动时将标志设置为True
,当你想要停止循环时将其设置为False
,然后使用VideoCapture.release()
关闭捕获设备。
这是一个例子
import cv2
from tkinter import *
from PIL import Image, ImageTk
cam_on = False
cap = None
mainWindow = Tk()
mainFrame = Frame(mainWindow, height = 640, width = 810)
mainFrame.place(x=350,y=0)
cameraFrame = Frame(mainWindow, height = 640, width = 405)
cameraFrame.place(x = 0, y = 0)
def show_frame():
if cam_on:
ret, frame = cap.read()
if ret:
cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img = Image.fromarray(cv2image).resize((810,640))
imgtk = ImageTk.PhotoImage(image=img)
vid_lbl.imgtk = imgtk
vid_lbl.configure(image=imgtk)
vid_lbl.after(10, show_frame)
def start_vid():
global cam_on, cap
stop_vid()
cam_on = True
cap = cv2.VideoCapture(0)
show_frame()
def stop_vid():
global cam_on
cam_on = False
if cap:
cap.release()
vid_lbl = Label(mainFrame)
vid_lbl.grid(row=0, column=0)
#Buttons
TurnCameraOn = Button(cameraFrame, text="start Video", bg = "blue", command=start_vid)
TurnCameraOn.place(x = 0, y = 0)
TurnCameraOff = Button(cameraFrame, text="stop Video", bg = "blue", command=stop_vid)
TurnCameraOff.place(x = 0, y = 300)
mainWindow.mainloop()