我在网上找到了一些代码,并做了一些修改。我正在做一个导航项目,希望用户通过单击地图图像来输入起点和终点。这是我所拥有的:
import cv2 as cv2
def draw_circle(event,x,y,flags,param):
global mouseX,mouseY
if event == cv2.EVENT_LBUTTONDBLCLK:
cv2.circle(img,(x,y),2,(0,0,0),-1)
mouseX,mouseY = x,y
img = cv2.imread("1.png")
img = cv2.resize(g1,(800,600))
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)
cv2.imshow('image',img)
通常我们需要cv2.waitKey()
才能显示此图像,但是在这种情况下,我真的不知道接下来要做什么。
我想显示此地图视图,当用户双击它时,它将显示一个黑点(已实现)。在用户输入两点之后,图像将关闭,并且该函数将返回两组像素级坐标,以指示用户单击的位置。
[我看到人们将cv2.imshow()
和cv2.waitKey()
放在while循环中,这将显示图像,并且click功能也可以正常工作。但是我不知道如何以这种方式返回像素坐标。
import cv2 as cv2
def draw_circle(event,x,y,flags,param):
global mouseX,mouseY
if event == cv2.EVENT_LBUTTONDBLCLK:
cv2.circle(img,(x,y),2,(0,0,0),-1)
mouseX,mouseY = x,y
cv2.destroyWindow('image')
print('last position: ', mouseX, mouseY)
img = cv2.imread("1.jpg")
img = cv2.resize(img, (800,600))
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)
cv2.imshow('image',img)
cv2.waitKey()
如果运行此代码,它将注册鼠标的最后位置,破坏窗口并在控制台上打印结果。您的窍门应该使用回调函数提供的x
和y
。希望这会有所帮助。