OpenCV Python鼠标事件无响应



我正在尝试使用opencv、tkinter和python创建一个应用程序,人们可以在照片上标记自己的名字。他们将自己的名字写在一个文本字段中,当他们通过GUI打开图像时,他们双击图像以添加自己的名字。所以,基本上,当你点击图像时,它就是从文本框中抓取文本。我已经检查了effbot、tkinter/python文档和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"""

您的鼠标回调将转到一个不存在的目标/窗口名称。

如果您选择一个名称,如:"绘制::按ESC退出;双击TAG",

这也必须进入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()

最新更新