当前位置: 首页 > news >正文

OpenCV界面编程

《OpenCV计算机视觉开发实践:基于Python(人工智能技术丛书)》(朱文伟,李建英)【摘要 书评 试读】- 京东图书

OpenCV的Python开发环境搭建(Windows)-CSDN博客

OpenCV也支持有限的界面编程,主要是针对窗口、控件和鼠标事件等,比如滑块。有了这些窗口和控件,可以更好地展现图像并调节图像的一些参数。这些界面编程主要由High-level GUI(高层次图形用户界面)模块支持。

在High-level GUI模块中,用于新建窗口的函数是nameWindow,同时可以指定窗口的类型。该函数声明如下:

namedWindow(winname[, flags]) -> None

其中,参数winname表示新建的窗口名称,自己随便取;flags表示窗口的标识(一般默认为cv2.WINDOW_AUTOSIZE,表示窗口大小自动适应图片大小,并且不可手动更改;cv2.WINDOW_NORMAL表示用户可以改变这个窗口大小;cv.WINDOW_OPENGL窗口创建的时候会支持OpenGL)。

在High-level GUI模块中,用于显示窗口的函数是imshow,声明如下:

imshow(winname, mat) -> None

其中,参数winname表示显示的窗口名,可以使用namedWindow函数创建窗口,如果不创建,imshow函数将自动创建;image表示需要显示的图像。

根据图像的深度,imshow函数会自动对其显示灰度值进行缩放,规则如下:

(1)如果图像数据类型是8U(8位无符号),就直接显示。

(2)如果图像数据类型是16U(16位无符号)或32S(32位有符号整数),那么imshow函数内部会自动将每个像素值除以256并显示,即将原图像素值的范围由[0~255×256]映射到[0~255]。

(3)如果图像数据类型是32F(32位浮点数)或64F(64位浮点数),那么imshow函数内部会自动将每个像素值乘以255并显示,即将原图像素值的范围由[0~1]映射到[0~255](注意:原图像素值必须归一化)。

需要注意的一点就是,imshow之后必须跟上waitKey函数,否则显示窗口将一闪而过,不会驻留屏幕。waitKey函数声明如下:

waitKey([delay]) -> retval

其中,参数delay表示一个延时值,单位为ms,默认为0,永久延时,一直等待,直到用户按键。如果在指定时间之前没有按下任何键,就返回-1;如果在指定时间之前按下任何键,就返回按键的对应值。

当delay≤0时,函数waitKey无限地等待一个键事件,当delay>0时,则等待delay毫秒。由于操作系统在切换线程之间有一个最短的时间间隔,因此该函数不会正好等待delay毫秒,而是等待比delay毫秒长一些,这取决于当时计算机上运行的其他操作。如果在指定时间之前没有按下任何键,就返回按下键的代码或-1。注意,此函数是HighGUI模块中唯一可以获取和处理事件的方法,因此需要定期调用它以进行正常的事件处理,除非HighGUI是在负责事件处理的环境中使用的。

另外,只有在至少创建了一个HighGUI窗口并且该窗口处于活动状态时,该函数才起作用。如果有几个HighGUI窗口,那么其中任何一个都可以是活动的。

【例3.5】  新建窗口并显示5秒后退出

import cv2 as cv 
import numpy as np #导入numpy模块 
img = cv.imread('p1.jpg')
cv.namedWindow("myimg", cv.WINDOW_AUTOSIZE); 
cv.imshow("myimg",img);#在“窗口1”中输出图片
cv.waitKey(5000);#等待5秒,程序自动退出

在上述代码中,首先利用函数imread读取当前目录下的p1.jpg文件,接着用函数namedWindow新建一个窗口,并用参数WINDOW_AUTOSIZE表示窗口大小自动适应图片大小,并且不可手动更改;最后调用waitKey函数等待5秒后程序自动退出。

运行工程,结果如图3-6所示。

图3‑6

相关文章:

  • Sora 2.0商业应用:从文本生成可交互的3D数字人
  • SSH服务
  • I/O多路复用 + Reactor和Proactor + 一致性哈希
  • JUC中的所有类详解
  • 架构设计基础:面向对象设计的原则
  • 【FPGA实战】基于DE2-115实现数字秒表
  • 【C++】自实现简谱播放
  • ESP-IDF中调用xEventGroupWaitBits函数失效问题的分析(1)
  • 碰一碰发视频网页版本开发的源码搭建指南
  • 三、FFmpeg学习笔记
  • 26--DHCP Snooping:网络世界的“房产中介资格认证系统“
  • 解锁健康密码,踏上养生旅程
  • YOLOV8 训练姿态检测模型
  • linux权限
  • 【实战】渗透测试下的传输命令
  • Linux安装Ubuntu24.04系统 并安装配置Nvidia 4090 显卡驱动
  • PTS-G3K13M RF Generator 3kW / 13MHz User’s Manual 手侧
  • Redis 6.2.6 生产环境单机配置详解redis.conf
  • 循环神经网络 - 简单循环网络
  • 正则表达式最小生成树算法题
  • 江苏疾控:下设部门无“病毒研究所”,常荣山非本单位工作人员
  • 墨西哥海军帆船纽约撞桥事故已致2人死亡19人受伤
  • 人民网:激发博物馆创新活力,让“过去”拥有“未来”
  • 经济日报金观平:促进信贷资金畅达小微企业
  • 用贝多芬八首钢琴三重奏纪念风雨并肩20年
  • 【社论】城市更新,始终以人为核心