OpenCV中cv2.setMouseCallback与cv2.waitKey冲突:鼠标事件后无法捕获键盘事件
解决OpenCV鼠标点击后键盘事件失效的问题
问题根源在于鼠标点击后窗口可能丢失焦点,导致waitKey无法正常捕获键盘事件。通过以下修改可确保鼠标与键盘事件无干扰共存:
修改后的代码
import cv2 import numpy as np image = np.ones((100, 100, 3)) def click_event(event, x, y, flags, param): if event == cv2.EVENT_LBUTTONUP: print(f'left click') # 初始化窗口并绑定鼠标回调 cv2.namedWindow('Image') cv2.setMouseCallback('Image', click_event) while True: # 循环内持续刷新窗口,维持激活状态 cv2.imshow('Image', image) key = cv2.waitKey(1) & 0xFF if key == 83: # 右键箭头 print('right') elif key == 81: # 左键箭头 print('left') elif key == 27: # ESC键 print('esc') break # 处理手动关闭窗口的情况 elif cv2.getWindowProperty('Image', cv2.WND_PROP_VISIBLE) < 1: break cv2.destroyAllWindows()
关键修改说明
- 将窗口初始化与鼠标回调绑定放在循环外,避免重复执行
- 主循环内持续调用
cv2.imshow,确保窗口始终处于激活状态,防止鼠标点击后焦点丢失 - 增加窗口可见性检查,处理用户手动关闭窗口的场景
内容的提问来源于stack exchange,提问作者J Singh
相关产品推荐
相关产品推荐

