2013-06-12 3 views
0

누군가가 카메라를 볼 수 없도록 주석 처리 된 코드를 수정 한 이유를 설명 할 수 있습니까? 나는 x.update_video 방법에서 오류 메시지포장 된 Tkinter 캔버스에 카메라를 사용하는 방법 (opencv) [해결]

" self.a = Image.fromarray(self.capture)#PIL 1.6# AttributeError: class Image has no attribute 'fromarray'"

를 얻을. 토픽의 코드는 OpenCV (cv2 in Python) VideoCapture not releasing camera after deletion 입니다. 저는 Tkinter를 매우 신중하게 사용하고 있으며 튜토리얼에서 도움이되지 않았습니다. 캔버스뿐만 아니라 프레임도 포장되어 있다고 생각합니다. 당신이 그런 방법이없는 클래스 fromarray를 호출하려는 :하지만

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 

답변

1

오류 메시지는 문제가 정확히 무엇을 말하고있다 ... 모든 솔루션이 있어야합니다. 이는 아마도 Image이 당신이 생각하는 것과 다르다는 것을 의미하므로, Image이 무엇인지 직접 확인하고 fromarray 방법을 사용해야하는지 여부를 직접 확인하십시오.

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) ... 

주석이 달린 버전에서 작동합니다. 이미지 클래스에는 아직 잘 문서화되어 있지 않지만 fromarray 메소드가 있지만.

0

브라이언의 대답은 다소 혼란 스러웠지만 우리는 옳습니다. 내 문제는 include에 의해 발생했습니다. 가져 오기 *를 사용하지 마십시오. Tkinter의 Image 클래스를 사용하여 PIL 모듈에서 Image 클래스를 덮어 썼습니다.이 클래스에는 이러한 메서드가 없습니다. 감사.

+0

그래서 마침내 알아 냈습니다. –

+0

예 문제가 해결되었습니다. –

관련 문제