You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 21:03:13