我正在尝试使用opencv,tkinter和python创建一个应用程序,人们可以在照片上标记他们的名字。他们在文本字段中写下他们的名字,当他们通过GUI打开图像时,他们双击图像以添加他们的名字。因此,基本上,当您单击图像时,它会从文本框中抓取文本。我已经检查了effbot和tkinter / python文档和opencv文档,我无法理解为什么当我双击它时,文本字段中的名称不会显示在图像上。我尝试使用print语句来确保它正在查看文本框中的文本。文本框的名称是全局声明的。有没有人有任何建议,为什么这不起作用?谢谢你的任何建议。
"""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 :(得分:2)
您的鼠标回调转到不存在的目标/ windowname。
如果您选择以下名称:" Paint ::按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()