昊虹AI笔记网

 找回密码
 立即注册
搜索
查看: 1353|回复: 0
收起左侧

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

[复制链接]

239

主题

241

帖子

928

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
928
昊虹君 发表于 2022-10-19 12:54 | 显示全部楼层 |阅读模式
详解OpenCV的窗口创建函数namedWindow()

函数namedWindow()用于创建窗口,窗口通常用来显示图像。

我们在使用函数imshow()显示图像时通常并不会使用这个函数,因为函数imshow()在显示窗口时会自动创建图像显示的窗口。
但有时候我们需要事先对显示图像的窗口作一些设置,此时就需要用到函数namedWindow()。

其C++原型如下:
  1. void cv::namedWindow(const String & winname,int flags = WINDOW_AUTOSIZE )
复制代码


其Python原型如下:
  1. 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模式下,窗口以正常窗口样式显示。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|昊虹AI笔记网 ( 蜀ICP备2022024117号-1 )

GMT+8, 2024-5-6 12:52 , Processed in 0.025519 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表