我正在创建一个演示项目来跟踪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')
通过这种实现,我总是得到鼠标按下和mouseup事件,只有单击事件。我无法获得双击事件(EVENT_LBUTTONDBLCLK)。这个常数的值是7。
答案 0 :(得分:1)
您可以尝试使用时间测量来解决问题,例如time.clock()(不精确但最简单)以及click和previous之间的时差计算。如果时间小于阈值,则执行双击操作。
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)
答案 1 :(得分:0)
答案 2 :(得分:0)
我刚从El Capitan for 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是否与您的设置有任何关系?
祝你好运。答案 3 :(得分:0)
对于像我这样想要copy-paste
的人:
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()
设置回调时,您可以使用最后一个参数params
传递帧:
cv2.setMouseCallback("image", double_click, img)
答案 4 :(得分:0)
临时的简单技巧(直到有人提出真实答案):
将事件从“ EVENT_LBUTTONDBLCLK”更改为任何非双击事件(例如“ EVENT_LBUTTONDOWN”)
答案 5 :(得分:0)
ENV:macOS High Sierra,OpenCV 3.4,Python 3.7.0
遇到同样的问题。 尝试过Apple Magic Pad /罗技无线鼠标,结果相同。
在macOS中调整鼠标单击速度的首选项没有帮助。
只需将所需事件从(EVENT_LBUTTONDBLCLK)更改为(EVENT_LBUTTONDOWN)即可。