opencv 轻松入门 面向python pdf_面向Python的OpenCV轻松入门——第一章(2)

下面通过一个示例演示如何通过函数cv2.witkey实现交互功能。

例1.3】在一个窗口内显示图像,并针对按下的不同按键做出不同的反应。

 函数cv2.waitkey()能够获取按键的ASCⅡ码。例如,如果该函数的返回值为97,表示按下了键盘上的字母a键。通过将返回值与ASCⅡ码值进行比较,就可以确定是否按下了某个特定的键。例如,通过语句“返回值-97”就可以判断是否按下了字母a键。 Python提供了函数ord(),用来获取字符的ASCII码值。因此,在判断是否按下了某个特定的按键时,可以先使用ord()函数获取该特定字符的ASCI码值,再将该值与cv2.waitkey() 函数的返回值进行比较,从而确定是否按下了某个特定的键。这样,在程序设计中就不需要ASCⅡ值的直接参与了,从而避免了使用ASCII进行比较可能带来的不便。例如,要判断是否 按下了字母A键,可以直接使用“返回值ord('A')”语句来完成。

根据题目要求及以上分析,编写代码如下:

import cv2
lena=cv2.imread("lena.bmp")
cv2.imshow("demo", lena)
key=cv2.waitkey ()
if key==ord('A'):
cv2.imshow("PressA",lena)
elif key==ord('B'):
cv2.imshow("PressB",lena)

运行上述程序,按下键盘上的A键或者B键,会在一个新的窗口内显示图像lena.bmp, 它们的不同之处在于:

  • 如果按下的是键盘上的A键,则新出现的窗口名称为 Pressa,如图1-4的左图所示。
  • 如果按下的是键盘上的B键,则新出现的窗口名称为 Press,如图1-4的右图所示。
9fb6db9ddfbcef679c21931d93aa6302.png
图1-4【例1.3】程序的运行结果

 从另外一个角度理解,该函数还能够让程序实现暂停功能。当程序运行到该语句时,会按 照参数 delay的设定等待特定时长。根据该值的不同,可能有不同的情况:

  • 如果参数 delay的值为0,则程序会一直等待。直到有按下键盘按键的事件发生时,オ会执行后续程序。

  • 如果参数 delay的值为一个正数,则在这段时间内,程序等待按下键盘按键。当有按下键盘按键的事件发生时,就继续执行后续程序语句;如果在 delay参数所指定的时间内 直没有这样的事件发生,则超过等待时间后,继续执行后续的程序语句。

例1.4】在一个窗口内显示图像,用函数cv2. witkey实现程序暂停,在按下键盘的按键后让程序继续运行。

根据题目要求,编写代码如下:

import cv2
lena=cv2.imread("lena.bmp")
cv2.imshow("demo", lena)
key=cv2.waitkey ()
if key!=-1:
print("触发了按键”)

 运行上述程序,首先会在一个名为demo的窗口内显示lena.bmp图像。在未按下键盘上的 按键时,程序没有新的状态出现;当按下键盘上的任意一个按键后,会在控制台打印“触发了按键”。

 在本例中,由于cv2. waitkeyoi函数的参数值是默认值0,所以在未按下键盘上的按键时,程序会一直处于暂停状态。当按下键盘上的任意一个按键时,程序中key=cv2.waitkey()下方的 语句便得以执行,程序输出“触发了按键”。

  1. destroy Window函数  函数cv2.destroyWindow()用来释放(销毁)指定窗口,其语法格式为:
None= cv2 destroywindow( winname)

其中, winname是窗口的名称.

 在实际使用中,该函数通常与函数cv2.waitkey()组合实现窗口的释放。【例1.5】编写一个程序,演示如何使用函数cv2. destroy Window释放窗口。

根据题目要求,编写代码如下

import cv2
lena=cv2.imread("lena.bmp")
cv2.imshow("demo", lena)
cv2.waitkey()
cv2 destroyWindow("demo")

 运行上述程序,首先会在一个名为demo的窗口内显示lena.bmp图像。在程序运行的过程 中,当未按下键盘上的按键时,程序没有新的状态出现;当按下键盘上的任意一个按键后,窗 口demo会被释放。

  1. destroyallwindows函数 函数cv2.destroyAllwindows()用来释放(销毁)所有窗口,其语法格式为:
None =cv2.destroyallwindows()

例1.6】编写一个程序,演示如何使用函数cv2.destroyAllwindows()释放所有窗口。

根据题目要求,编写代码如下

import cv2
lena=cv2.imread("lena. bmp")
cv2.imshow("demol", lena)
cv2.imshow("demo2", lena)
cv2.waitkey()
cv2.destroyAllWindows()

 运行上述程序,会分别出现名称为 demol和demo2的窗口,在两个窗口中显示的都是lena.bmp图像。在未按下键盘上的按键时,程序没有新的状态出现:当按下键盘上的任意一个 按键后,两个窗口都会被释放。

1.2.3 保存图像  OpenCV提供了函数cv2.imwrite(),用来保存图像,该函数的语法格式为:

retval = cv2.imwrite( filename, img[ ,params])

式中:

  • retval是返回值。如果保存成功,则返回逻辑值真(True);如果保存不成功,则返回逻辑值假( False).
  • filename是要保存的目标文件的完整路径名,包含文件扩展名。
  • img是被保存图像的名称。
  • params是保存类型参数,是可选的。【例1.7】编写一个程序,将读取的图像保存到当前目录下。根据题目要求,编写代码如下:
import cv2
lena=cv2.imread("lena.bmp")
r=cv2.imwrite("result.bmp", lena)

上述程序会先读取当前目录下的图像lena.bmp,生成它的一个副本图像,然后将该图像以名称 result.bmp存储到当前目录下。

1.3 Opencv贡献库

目前, Opencv库包含如下两部分。

  • Opencv主库:即通常安装的 Opencv库,该库是成熟稳定的,由核心的 Opencv团队 维护。
  • Opencv贡献库:该扩展库的名称为 opencv contrib,主要由社区开发和维护,其包含 的视觉应用比 Opencv主库更全面。需要注意的是, Opencv贡献库中包含非 Opencv 许可的部分,并且包含受专利保护的算法。因此,在使用该模块前需要特别注意。

Opencv贡献库中包含了非常多的扩展模块,举例如下。

  • bioinspired:生物视觉模块。
  • datasets:数据集读取模块。
  • dnn:深度神经网络模块。
  • face:人脸识别模块。
  • matlab: MATLAB接口模块。
  • stereo:双目立体匹配模块。
  • text:视觉文本匹配模块。
  • tracking:基于视觉的目标跟踪模块。
  • Ximgpro:图像处理扩展模块。
  • xobjdetect:增强2D目标检测模块。
  • photo:计算摄影扩展模块。

可以通过以下两种方式使用贡献库:

  • 下载 Opencv贡献库,使用 cmake手动编译。
  • 通过语句 pip install opencv-contrib- python直接安装编译好的 Opencv贡献库。网页htts/pypi.org/ project/opencv- contrib- python/上提供了该方案的常见问题列表FAQ( Frequently Asked Questions),而且该FAQ是不断更新的。
3bd11e5325575f99e2fd15fa6628582e.gif d2ad9bc7224eb1946ca7c8118d311dc3.png

joker-wt

扫码|关注我们

微信号|joker-wt123

新浪微博|梧tw桐

承蒙关照!!!

我的心愿是——世界和平

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值