2014-08-30 142 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