昊虹君 发表于 2022-10-19 12:54

详解OpenCV的窗口创建函数namedWindow()

详解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模式下,操作窗口的用户可以随意调整窗口大小(不固定窗口的宽高比例),您可对全屏显示的大尺寸图像自由调整到自己觉得适合的大小。

示例代码如下:

# -*- 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模式下,创建的窗口以图像的实际尺寸显示,并且不能进行缩放。
注意:这里的全屏并不是大家通理解的全屏效果,只有一幅图像的尺寸超过了显示器的分辨率尺寸,才体现为大家通常理解的全屏效果。

示例如下:

# -*- 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()

运行结果截图如下:
http://pic1.hhai.cc/pic1/2022/2022-10/0007/001.png
从该运行结果可以看出,这幅图并没有以大家通常理解的全屏效果来显示,而是以其实际尺寸来显示的,因为这幅图的大小并没有达到屏幕的分辨率尺寸。


第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模式下,窗口以正常窗口样式显示。
页: [1]
查看完整版本: 详解OpenCV的窗口创建函数namedWindow()