首页
学习
活动
专区
工具
TVP
发布

小林的OpenCV基础课 2

先放一张2018绘师100人展的作品,来自初音官方绘师KEI

Hello World讲解

上一话我们写了一个能显示小林自拍照的Hello World示例程序,然后说好的讲解一下。

先贴出代码

前两行是模块的导入,这是python的基础知识。这里引入了两个模块,一个是必须用到的OpenCV的cv2,另一个是做OpenCV开发时常用的numpy(在这段代码中并没有使用numpy,为了养成良好的习惯,小林建议同学们导入这个包)。紧接着在控制台打印“Hello World.”字符串。

然后,敲黑板了,因为要载入小林自拍照了。我们使用一个矩阵(起名叫img)储存Kobayashi.JPG,这里用到了同学们要学的第一个OpenCV函数imread,它用来读取一副图像。函数原型

retvalue:存储图像用的矩阵,可为单通道和多通道。

filename:图片文件名,字符串形式,如果图片和当前的python文件在同一路径下,这个参数可为文件名,反之需为图片文件完整的路径,win下文件路径中默认使用“\”,而代码中则需为“\ \”,原因就是转义字符的存在。

flags:可选参数,用于指明图片以何种色彩空间载入,(关于色彩空间的知识小林会在下一话更新,想提前了解的同学亦可自行查阅相关资料)常用值

下一行用到的函数是imshow,顾名思义,是用来显示图像的。函数原型

winname:窗口名称,字符串形式。

mat:要显示的图像对应的矩阵。由此可以看出,窗口呈现的内容是矩阵,换言之,如果要同时显示多幅图像则需先使用namedWindow函数(劳烦同学们自行查阅API)创建窗口,再对各个窗口使用imshow函数。

然后是waitKey函数,用于等待按键按下或毫秒级延时。函数原型

retval :delay0时,若在delay时间内无按键按下则返回-1,反之返回按键键码。

delay:>0为毫秒级延时时长,

最后是destroyAllWindows函数,也就是关掉所有窗口,以释放资源。函数原型

总体来说,我们常见的python版OpenCV代码主要由三部分组成,即

包和模块的导入

功能部分的实现

结束并释放资源

来自托尔酱的提示:

同学们在查阅API时会发现,文档中使用的模块是cv,而我们使用的模块是cv2,这是为什么呢?其实,cv是OpenCV 1.x版本的模块,属于过去时,cv2是OpenCV 2.x和OpenCV 3.x版本的模块,及现在时和将来时,cv2兼容了cv中的绝大部分内容,托尔也推荐使用cv2。

waitKey函数在使用时要注意,该函数只能在有至少一个窗口时才能使用。64位机器中如需返回键码建议手动补全高八位,即如下写法

我们还能做什么?

当然是打开摄像头做网红啦!

下面小林将讲解如何打开摄像头并在屏幕上显示摄像头画面。

原理讲解:视频其实是由一幅幅画面组成,称为帧。利用人眼的暂留效应,在一定的时间间隔下“放映”每一幅画面即可形成动态效果。我们的摄像头采集视频也是同样的道理,每个采集周期T采集一幅画面并显示出来,周期T的倒数记为f,称之为帧频,单位fps(frames per second)。

在OpenCV中,通常将采集画面和显示画面放在一个循环里,并用waitKey函数控制帧频,即可实现视频的效果。OpenCV支持多源采集视频,即同时允许多个源头(比如双目摄像头或摄像头阵列)采集画面,前提是手动为源头标号以免混淆。

导入模块后,注册一个摄像头

写一个循环,在循环体中读取当前帧并显示出来,循环体的最后加入一个条件判断,用于设定帧频和确定退出循环即结束采集的条件。代码如下

使用笔记本的同学是不是在屏幕中看到了帅帅的自己呢?

用到的新函数read。函数原型

retval:若成功捕获当前帧,则返回True,反之返回False。

这一话的示例代码已经同步到Github上了,Github搜索Kobayashi_OpenCV_py

关注这个神奇的公众号

与小林酱一起出发

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180505G0PQ5I00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券