设置cv2窗口全屏属性时出错
我正在尝试用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。