2014-08-30 139 views
0

我想創建一個應用程序使用opencv,tkinter和python,人們可以在照片上標記他們的名字。他們將他們的名字寫在文本字段中,當他們通過GUI打開圖像時,他們雙擊圖像以添加他們的名字。所以,基本上,當你點擊圖片時,它從文本框中抓取文本。我檢查了effbot和tkinter/python文檔和opencv文檔,我無法明白爲什麼當我雙擊它時文本字段中的名稱不會顯示在圖像上。我試着打印報表以確保它看到文本框中的文本,並且是。文本框的名稱是全局聲明的。有沒有人有任何建議,爲什麼這不起作用?感謝您的任何建議。OpenCV蟒蛇鼠標事件無響應

"""PAINT: TAG IMAGE WITH TEXT FROM TKINTER ENTRY FIELD""" 
    img = cv2.imread('photoBoothOut.jpg',0) 

def draw_text(event, x,y, flags,param): 
    if event == cv2.EVENT_LBUTTONDBLCLK: 
     cv2.putText(img,nameTextField.get(), (x,y), cv2.FONT_HERSHEY_SIMPLEX, 2, (0,0,0), 2) 
     print nameTextField.get() 


def paint_canvas(): 
    cv2.namedWindow("Paint :: Press ESC to exit; Double Click to TAG") 
    while(1): 
     cv2.imshow("Paint :: Press ESC to exit; Double Click to TAG",img) 
     cv2.setMouseCallback("image",draw_text) 
     if cv2.waitKey(20) & 0xFF ==27: 
      break 
    cv2.destroyAllWindows() 

"""END PAINT""" 
+0

你確定這是tkinter嗎? Tkinter沒有像'setMouseCallback'和'waitKey'這樣的方法。 – 2014-08-30 02:49:40

+0

這可能是我的問題之一。我正在使用Tkinter和OpenCV庫的組合。所以有可能讓他們感到困惑。我應該編輯我的問題嗎? – JustBlossom 2014-08-30 03:31:35

+0

這是'openCV'代碼,沒關係。你將面臨的一個非常大的問題是,如何處理(協調)兩個單獨的控制器(一個用於運行「Tkinter」-MVC,第二個用於'OpenCV'-MVC並行運行) – user3666197 2014-08-30 07:40:16

回答

2

你的鼠標回調轉到一個不存在的目標/ windowname。

,如果你選擇喜歡的名稱:「畫圖::按ESC鍵退出;雙擊標籤」

這必須進入setMouseCallback(),太。 (你必須與命名一致):

def paint_canvas(): 
    winname="Paint :: Press ESC to exit; Double Click to TAG" 
    cv2.namedWindow(winname) 
    cv2.setMouseCallback(winname,draw_text) 
    while(1): 
     cv2.imshow(winname,img) 
     if cv2.waitKey(20) & 0xFF ==27: 
      break 
    cv2.destroyAllWindows() 
+0

謝謝!這是有道理的,因爲我之前已經開始工作了,然後我開始清理我的代碼,使它看起來更好。在那裏的某個地方,我一定把名字弄亂了。 – JustBlossom 2014-08-30 13:22:33