Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在OpenCV for python中获取双击事件 带python的OpenCV(MAC OS X EL Capitan)_Opencv_Python 3.x - Fatal编程技术网

无法在OpenCV for python中获取双击事件 带python的OpenCV(MAC OS X EL Capitan)

无法在OpenCV for python中获取双击事件 带python的OpenCV(MAC OS X EL Capitan),opencv,python-3.x,Opencv,Python 3.x,我正在创建一个演示项目来跟踪openCV中的鼠标事件。使用openCV中的标准mouseCallback 下面是我的代码 drawWithMouse.py #!/usr/local/bin/local/python3 import numpy as np import cv2 as cv #Mouse callback function def draw_shape(event,x,y,flags,param): print("event : ",event)

我正在创建一个演示项目来跟踪openCV中的鼠标事件。使用openCV中的标准mouseCallback

下面是我的代码

drawWithMouse.py

#!/usr/local/bin/local/python3
import numpy as np
import cv2 as cv

#Mouse callback function
def draw_shape(event,x,y,flags,param):
    print("event : ",event)
    if event == cv.EVENT_LBUTTONDBLCLK:
        cv.circle(img,(x,y),100,(255,0,0),-1)

#Create a black image, a window and bind the function to the window
img = np.zeros((780,780,3),np.uint8)
cv.namedWindow('DrawWithMouse')
cv.setMouseCallback('DrawWithMouse',draw_shape)

while(1):
    cv.imshow('DrawWithMouse',img)
    if cv.waitKey(10) & 0xFF == 27: #ANDing with 0xFF as my machine is 64 bit
        break

cv.destroyWindow('DrawWithMouse')
在这个实现中,我总是得到mouse-down和mouseup事件,并且只有一次单击事件。我无法获取双击事件(event_lbuttondblck)。该常数的值为7


我得到了以下输出

我刚刚试着运行你的代码,对我来说一切都很好。我按下并按住一个1,我松开,有一个4。当我双击时,有一个7。但是,如果鼠标正在移动,则此操作不起作用。双击鼠标时,请尝试保持鼠标静止,或者尝试使用另一个鼠标。您可以尝试解决时间测量问题,例如time.clock()(不精确,但最简单)以及计算单击和上一次单击之间的时间差。如果时间小于阈值,请执行双击操作

time =0
thresh = 1
#Mouse callback function
def draw_shape(event,x,y,flags,param):
  print("event : ",event)
  if event == cv.EVENT_LBUTTONDBLCLK:
    if time.clock - time < thresh:
       //double click
    time = time.clock()
    cv.circle(img,(x,y),100,(255,0,0),-1)
time=0
thresh=1
#鼠标回调函数
def draw_形状(事件、x、y、标志、参数):
打印(“事件:”,事件)
如果event==cv.event\u lbuttondblck:
如果time.clock-时间<阈值:
//双击
time=time.clock()
等速圆(img,(x,y),100,(255,0,0),-1)

我刚在El Capitan为python 3下载了opencv python,因为我没有它:

下载opencv_python-3.3.0.10-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl(43.8MB)

运行示例代码,左键双击工作正常,创建了许多蓝色圆圈。然后我试图让它失败。我发现唯一接近的是将双击速度设置为系统首选项/鼠标中的最高标记:

我发现最高设定值和第二高设定值之间存在显著差异。在网上搜索时,使用快速或慢速极端都可能会给双击带来麻烦

您是否已验证您的双击功能是否正常工作?虽然我目前找不到它,但我相信曾经有一些设置将双击转换为两次单独的点击和其他潜在的Macintosh怪癖。X-Windows与您的设置有任何关系吗


祝你好运。

对于像我这样想复制粘贴的人来说:

import time

last_time = None

def double_click(self, event, x, y, flags, params)
    """handle double click"""
    if event == cv2.EVENT_LBUTTONDOWN:

        if last_time is not None and time.time() - last_time < 1:
            cv2.circle(img, (x, y), 20, (255, 0, 0), 2)
           last_time = None
        else:
           last_time = time.time()
暂时的简单破解(直到有人想出一个真正的答案):


将事件从“event_lbuttondblck”更改为任何非双击事件(例如“event_LBUTTONDOWN”)

ENV:macOS High Sierra、OpenCV 3.4、Python 3.7.0

遇到了同样的问题。 试过Apple magic pad/Logitech无线鼠标,结果也一样

在macOS中调整鼠标点击速度的首选项没有帮助


只需将所需事件从(event_lbuttondblck)更改为(event_LBUTTONDOWN)即可。

我曾在两台不同的计算机上尝试过此操作。这两台都是MAC电脑。我无法用两个不同的鼠标双击其中任何一台。@RajendrasinhParmar同样的情况也发生在我的电脑上macos@Fred你找到解决办法了吗?我试过了。好久不见了。我应该再试一次。由于我的系统中的所有内容都已更新,我认为这可能与MAC定点设备驱动程序和OpenCV交互相关的其他问题有关。然而,您针对EVENT_LBUTTONDOWN的解决方案似乎起到了作用。
cv2.setMouseCallback("image", double_click, img)