有人可以解释一下,为什么在注释掉代码后,没有更多的摄像头视图? 我收到错误消息
“self.a = Image.fromarray(self.capture)#PIL 1.6# AttributeError:class Image没有属性'fromarray'“
来自x.update_video方法。 评论的代码来自主题OpenCV (cv2 in Python) VideoCapture not releasing camera after deletion 我对Tkinter很新,在教程中没有找到任何帮助。 我想这是由于框架和画布一样。但必须有任何解决方案......
class App:
def __init__(self, master,cam):
## root = tk.Tk()
## videoframe = tk.LabelFrame(root,text='Captured video')
## videoframe.grid(column=0,row=0,columnspan=1,rowspan=1,padx=5, pady=5, ipadx=5, ipady=5)
## canvas = tk.Canvas(videoframe, width=640,height=480)
## canvas.grid(column=0,row=0)
## cam = cv2.VideoCapture(2)
## x = vid(cam,root,canvas)
## root.after(0,x.update_video)
## button = tk.Button(text='Quit',master=videoframe,command=root.destroy)
## button.grid(column=0,row=1)
## root.mainloop()
## del cam
frame = LabelFrame(master,text='Captured video')
frame.pack()
canvas = Canvas(frame, width=640,height=480)
canvas.pack(side=TOP)
x = vid(cam,master,canvas)
master.after(0,x.update_video)
self.button = Button(frame, text="QUIT", fg="red", command=master.destroy)
self.button.pack(side=LEFT)
self.hi_there = Button(frame, text="Hello", command=self.say_hi)
self.hi_there.pack(side=LEFT)
def say_hi(self):
print "hi there, everyone!"
root = Tk()
cam = cv2.VideoCapture(0)
app = App(root,cam)
root.mainloop()
del cam
答案 0 :(得分:1)
错误消息正在准确地告诉您问题所在:您尝试在没有此类方法的类上调用fromarray
。这可能意味着Image
不是您认为的那样,所以首先要确切地验证Image
是什么,以及是否应该使用fromarray
方法。
答案 1 :(得分:0)
我的图像是从相机捕获的。
def update_video(self):
(self.readsuccessful,self.f) = self.cam.read()
self.capture = cv2.cvtColor(self.f, cv2.COLOR_RGB2RGBA) #cv2.COLOR_RGB2GRAY)
self.a = Image.fromarray(self.capture)#nowe w PIL 1.6 #PIL.Image.VERSION=1.1.7
self.b = ImageTk.PhotoImage(image=self.a) ...
它适用于评论版。虽然Image类有fromarray方法,但还没有很好的文档化。
答案 2 :(得分:0)
Brayan的回答让我感到有些困惑,但我们是对的。我的问题是由include引起的。 永远不要使用import *。它用来自Tkinter的Image类从PIL模块覆盖了Image类,这个类没有这样的方法。感谢。