购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.3 OpenCV界面编程

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函数的详细说明将在3.8节中详细介绍。

【例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 DnQ0EPGUI3IRR2AlK8w5NyBEnDMkt4WgiMBxP5b2+QYZnrq/k8y9RIot5A6jJpiX

点击中间区域
呼出菜单
上一章
目录
下一章
×