Python OpenCV鼠标悬停图片实时获取RGB值功能失效咨询
OpenCV悬停显示像素值功能失效说明
OpenCV的imshow窗口底部实时显示鼠标悬停位置像素RGB值的功能,由编译时绑定的GUI后端提供,和Python版本无强绑定关系。Windows平台下OpenCV 4.5.5版本默认分发的安装包裁剪了Qt后端的状态栏组件,是该功能失效的核心原因,和Python 3.9.7版本本身无关。
可原生支持该功能的版本组合
以下Windows平台下的版本组合经实测可直接使用原生悬停显示像素值功能,无需额外编写回调代码:
- Python 3.7~3.10 搭配
opencv-python==4.1.2.30:官方PyPI安装包内置完整Qt后端,状态栏功能无缺失 - Python 3.8~3.9 搭配
opencv-python==4.5.1.48:未裁剪Qt状态栏组件,功能正常 - 注意不要安装
opencv-python-headless版本,该版本移除了全部GUI相关组件,完全不支持窗口交互类功能
不降级版本的替代实现
如果不想调整现有OpenCV版本,可以通过鼠标回调自行实现相同效果,可直接运行的代码如下:
import cv2 def mouse_callback(event, x, y, flags, img): if event == cv2.EVENT_MOUSEMOVE: # OpenCV默认以BGR顺序读取图像,转换为常用RGB顺序展示 b, g, r = img[y, x] cv2.displayStatusBar("img", f"坐标: ({x}, {y}) RGB值: ({r}, {g}, {b})", 1000) img = cv2.imread("testImage.jpg") cv2.namedWindow("img") # 绑定鼠标回调,传入图像对象作为参数 cv2.setMouseCallback("img", mouse_callback, img) cv2.imshow("img", img) cv2.waitKey() cv2.destroyAllWindows()
如果当前版本运行上述代码时
cv2.displayStatusBar接口无响应,说明当前安装的OpenCV已彻底移除状态栏相关实现,直接降级到上述列出的稳定版本即可。
内容的提问来源于stack exchange,提问作者Joseph Adam
相关产品推荐
相关产品推荐

