2016-11-21 63 views
1

我跟OpenCV的和Python Tkinter的工作。 我想要得到的OpenCV視頻幀Tkinter的拉布勒。 我已經使用了Threading,因爲我有兩個循環。 (我得到了指示,從this類圖像上有沒有屬性「fromarray」

當我試圖運行的代碼它顯示了我,

Press any key to continue . . . Exception in thread Thread-2:Traceback (mostrecent call last):File "C:\Python27\lib\threading.py", line 808, in __bootstrap_inner self.run() File "C:\Python27\lib\threading.py", line 761, in run self.__target(*self.__args, **self.__kwargs)File "c:\users\user1\documents\visual studio 2013\Projects\defTstWindow\defT stWindow\defTstWindow.py", line 26, in makeGUI img = Image.fromarray(cv2image) AttributeError: class Image has no attribute 'fromarray'

我alredy嘗試使用Python classes.I得到了同樣的錯誤。

但是,如果我在一個功能運行的所有物件(如this 1日回答),它的正常工作。

什麼是我的代碼的問題嗎?

現在我有四個Python模塊。

1.Support.py

import cv2 

global frame 
frame=None 

2.CamHandler.py

import cv2 
import numpy as np 
import Support 

cam=cv2.VideoCapture(0) 


def getFrame(): 
    while 1: 
    _,frm=cam.read() 

    #cv2.imshow('frm',frm) 
    Support.frame=frm 

    if cv2.waitKey(1) & 0xFF == ord('q'): 
     cv2.destroyAllWindows() 
     break 

3.defTstWindow.py

import sys 
import cv2 
import Image, ImageTk 

from Tkinter import * 
import Support 

def makeGUI(): 

    top=Tk() 

    top.geometry("600x449+650+151") 
    top.title("Test Window") 
    top.configure(background="#d9d9d9") 

    lblFrame = Label(top) 
    lblFrame.place(relx=0.03, rely=0.04, height=411, width=544) 
    lblFrame.configure(background="#d9d9d9") 
    lblFrame.configure(disabledforeground="#a3a3a3") 
    lblFrame.configure(foreground="#000000") 
    lblFrame.configure(text='''Label''') 
    lblFrame.configure(width=544) 

    cv2image = cv2.cvtColor(Support.frame, cv2.COLOR_BGR2RGBA) 
    img = Image.fromarray(cv2image) 
    imgtk = ImageTk.PhotoImage(image=img) 
    lblFrame.imgtk = imgtk 
    lblFrame.configure(image=imgtk) 
    #lblFrame.after(10, show_frame) 

    top.mainloop() 

4.main.py

import CamHandler 
    import defTstWindow 

    import threading 
    import time 


    threading.Thread(target=CamHandler.getFrame).start() 
    time.sleep(1) 
    threading.Thread(target=defTstWindow.makeGUI).start() 

回答

5

Tkinter命名空間包括類Image,所以當你寫

from Tkinter import * 

您更換的Image定義與Tkinter之一。

import *可能很方便,特別是在交互式shell中工作時,但不推薦用於腳本和更大的程序,這正是此問題中演示的原因。改變進口

from Tkinter import Tk, Label 

(添加你需要的是import語句任何其他名稱。)

+0

Thanks..I取代'從Tkinter的進口所有來自'Tkinter的進口TK,標籤 ' 但,它從我的相機只有一幀。原因是什麼? 它無法運行while循環嗎? – user119o

+0

你應該爲這個問題開始一個新的問題。 –

+0

是...關於Tkinter的拉布勒更新問題上的...我會盡力解決it.Thanks。 – user119o

相關問題