详解OpenCV的窗口创建函数namedWindow()
函数namedWindow()用于创建窗口,窗口通常用来显示图像。
我们在使用函数imshow()显示图像时通常并不会使用这个函数,因为函数imshow()在显示窗口时会自动创建图像显示的窗口。
但有时候我们需要事先对显示图像的窗口作一些设置,此时就需要用到函数namedWindow()。
其C++原型如下:
- void cv::namedWindow(const String & winname,int flags = WINDOW_AUTOSIZE )
复制代码
其Python原型如下:
- None = cv.namedWindow(winname[, flags] )
复制代码
第一个参数winname表示窗口的名字,是一个字符串类型的变量。
第二个参数flags是可选参数,其可选值及对应的意义如下:
注意:以下八种可选参数是针对OpenCV4.x版本的,OpenCV3.x只支持WINDOW_NORMAL、WINDOW_AUTOSIZE和WINDOW_OPENGL三种可选参数。
第1个可选值:
WINDOW_NORMAL
Python:cv.WINDOW_NORMAL
官方原话:the user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size.
翻译:在WINDOW_NORMAL模式下,操作窗口的用户可以随意调整窗口大小(不固定窗口的宽高比例),您可对全屏显示的大尺寸图像自由调整到自己觉得适合的大小。
示例代码如下:
[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-
# 出处:昊虹AI笔记网(hhai.cc)
# 用心记录计算机视觉和AI技术
# 博主微信/QQ 2487872782
# QQ群 271891601
# 欢迎技术交流与咨询
import cv2 as cv
img = cv.imread('./image/food-01.jpg')
cv.namedWindow('window_01', cv.WINDOW_NORMAL)
cv.namedWindow('window_01')
cv.imshow('window_01', img)
cv.waitKey(0)
cv.destroyAllWindows()
第2个可选值:
WINDOW_AUTOSIZE
Python: cv.WINDOW_AUTOSIZE
官方原话:the user cannot resize the window, the size is constrainted by the image displayed.
翻译:在WINDOW_AUTOSIZE模式下,操作窗口的用户不能改变窗口的大小,窗口的大小取决于图像的大小。
第3个可选值:
WINDOW_OPENGL
Python: cv.WINDOW_OPENG
官方原话:window with opengl support.
翻译:在WINDOW_OPENGL模式下,创建的窗口可支持OPENGL。
OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。
第4个可选值:
WINDOW_FULLSCREEN
Python: cv.WINDOW_FULLSCREEN
官方原话:change the window to fullscreen.
翻译:在WINDOW_FULLSCREEN模式下,创建的窗口以图像的实际尺寸显示,并且不能进行缩放。
注意:这里的全屏并不是大家通理解的全屏效果,只有一幅图像的尺寸超过了显示器的分辨率尺寸,才体现为大家通常理解的全屏效果。
示例如下:
[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-
# 出处:昊虹AI笔记网(hhai.cc)
# 用心记录计算机视觉和AI技术
# 博主微信/QQ 2487872782
# QQ群 271891601
# 欢迎技术交流与咨询
# OpenCV的版本为4.4.0
import cv2 as cv
img = cv.imread('F:/material/images/2022/2022-10/bxf_small.jpg')
cv.namedWindow('window_FULLSCREEN', cv.WINDOW_FULLSCREEN)
cv.imshow('window_FULLSCREEN', img)
cv.waitKey(0)
cv.destroyAllWindows()
运行结果截图如下:
从该运行结果可以看出,这幅图并没有以大家通常理解的全屏效果来显示,而是以其实际尺寸来显示的,因为这幅图的大小并没有达到屏幕的分辨率尺寸。
第5个可选值:
WINDOW_FREERATIO
Python: cv.WINDOW_FREERATIO
官方原话:the image expends as much as it can (no ratio constraint).
翻译:在WINDOW_FREERATIO模式下,窗口可以以任意宽高比例显示,即不固定宽高比例。
经过实测,WINDOW_FREERATIO模式和WINDOW_NORMAL似乎没有区别。
第6个可选值:
WINDOW_KEEPRATIO
Python: cv.WINDOW_KEEPRATIO
官方原话:the ratio of the image is respected.
翻译:在WINDOW_KEEPRATIO模式下,可以对窗口进行缩放,但是窗口的宽高比例保持不变。
第7个可选值:
WINDOW_GUI_EXPANDED
Python: cv.WINDOW_GUI_EXPANDED
官方原话:status bar and tool bar
翻译:在WINDOW_GUI_EXPANDED模式下,窗口可以添加状态栏和工具栏。
第8个可选值:
WINDOW_GUI_NORMAL
Python: cv.WINDOW_GUI_NORMAL
官方原话:old fashious way
翻译:在WINDOW_GUI_NORMAL模式下,窗口以正常窗口样式显示。
|