设置cv2窗口全屏属性时出错

3 投票
2 回答
5472 浏览
提问于 2025-04-18 18:19

我正在尝试用opencv2创建一个全屏窗口。我查阅了这里和其他地方的解决方案,但总是遇到错误。

首先,我是这样创建命名窗口的:

cv2.namedWindow("Target", cv2.cv.CV_WINDOW_NORMAL)

然后:

cv2.setWindowProperty("Target", cv2.WND_PROP_FULLSCREEN, cv2.cv.CV_WINDOW_FULLSCREEN)

结果给我带来了这个错误:

AttributeError: 'module' object has no attribute 'WND_PROP_FULLSCREEN'

我尝试使用:

cv2.CV_WND_PROP_FULLSCREEN

根据文档的说明,但还是出现了同样的错误。

AttributeError: 'module' object has no attribute 'CV_WND_PROP_FULLSCREEN'

有没有人知道我哪里出错了!?如果这是不可能的事情,有人能提供其他建议吗?比如如何在全屏窗口中显示cv2图像(不显示任何界面或工具栏)?老实说,只要不是太占用处理器,我都很乐意接受任何方法。

2 个回答

3

有时候,cv2模块中的常量跟C++版本相比,更新得比较慢,尤其是当你使用的是旧版本的OpenCV Python绑定时(比如在老旧的Ubuntu LTS版本上)。

不过,常量没有导出到Python并不意味着它们就不能正常工作。

我手头有:

>> cv2.__version__
'2.4.8'

这里没有cv2.CV_WND_PROP_FULLSCREEN,但是:

>> cv2.WND_PROP_FULLSCREEN
0

(更新的cv2实现中,很多标志前面不再加CV_了)

我之前不知道这个属性的值需要从旧的cv2.cv模块中获取(这个模块是旧的Python绑定):

>> cv2.cv.CV_WINDOW_FULLSCREEN
1

没错,它的值就是1

所以使用全屏其实很简单:

  • 创建窗口时使用cv2.WINDOW_NORMAL标志
  • 要进入全屏:

    cv2.setWindowProperty('Target', cv2.WND_PROP_FULLSCREEN, 1)

  • 或者如果你找不到cv2.WND_PROP_FULLSCREEN

    cv2.setWindowProperty('Target', 0, 1)

  • 要退出全屏:

    cv2.setWindowProperty('Target', cv2.WND_PROP_FULLSCREEN, 0)

  • 或者:

    cv2.setWindowProperty('Target', 0, 0)

即使这些标志缺失,底层的C++实现依然可以正常工作。

1

最后我选择使用pygame的窗口模式和全屏模式,完全不使用openCV。

撰写回答