如何在OpenCV中更改鼠标光标图像?

3

我尝试使用C++和OpenCV开发远程程序,并想要改变鼠标光标(十字线)。

然而,在OpenCV中更改它是困难的。 (在WINAPI中,可以使用Setcursor函数进行更改)

有没有办法改变鼠标光标图像?或隐藏它?


1
你做不到。OpenCV是一个计算机视觉库。你为什么期望它关心改变光标图标?使用GUI库而不是CV库来制作你的GUI。 - Miki
最好的情况是你可以在光标位置绘制十字线,但你无法使原始光标消失。 - Saransh Kejriwal
@SaranshKejriwal 那么你如何获得十字准线? - Lucas
你可以使用OpenCV的drawline函数绘制两条垂直线,它们在光标位置相交。给定光标位置,您可以从其略微左侧画出一条水平线,并向右侧延伸... 垂直线也是同样的方法。 - Saransh Kejriwal
2个回答

4

我有同样的需求,你可以这样做:

import cv2
import win32api
import win32con

def mouse_evt(event, x, y, flags, param):
    # Mouse is Moving
    if event == cv2.EVENT_MOUSEMOVE:
        if some_condition:
            win32api.SetCursor(win32api.LoadCursor(0, win32con.IDC_SIZEALL))

cv2.namedWindow("image")
cv2.setMouseCallback("image", mouse_evt)

while True:
    cv2.imshow("image", image)
    cv2.waitKey(10)

我个人使用它来拖动裁剪点,当光标接近图像上的一个设定点时,some_condition返回true。


1

我偶然发现了this,虽然它不直接适用于我们,但在你这样做之前:

import cv2
import win32api

cv2.namedWindow("my_window")
cv2.setMouseCallback("my_window", mouse_evt)

def mouse_evt(event, x, y, flags, param):
# could also probably do: def mouse_evt(*args):
    win32api.SetCursor(None)

隐藏光标的方法。这种解决方案的问题在于,如果光标移动,你可能会看到它的一闪而过。但是,如果你愿意忽略这个问题,它就能完美地工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接