在图像上用opencv实现鼠标输入

问题描述 投票:0回答:1

我在网上找到了一些代码,并做了一些修改。我正在做一个导航项目,希望用户通过单击地图图像来输入起点和终点。这是我所拥有的:

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功能也可以正常工作。但是我不知道如何以这种方式返回像素坐标。

python opencv
1个回答
0
投票
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()

如果运行此代码,它将注册鼠标的最后位置,破坏窗口并在控制台上打印结果。您的窍门应该使用回调函数提供的xy。希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.