查看: 3479|回复: 10

初学者福利!深度学习最常用OpenCV的操作

[复制链接]

1

主题

1

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2018-9-13 10:52:20 | 显示全部楼层 |阅读模式
随着AlphaGo等智能系统的大获成功,人工智能成为了全社会关注的热词。以深度学习为代表的人工智能技术,在许多领域都取得了超过人类的能力。图像处理,是深度学习应用的主战场之一。以图像处理技术为基础,刷脸进站、智慧门禁、美颜等眼花缭乱的应用走入了大众的生活。今天,易学智能不讨论深度学习算法,而是谈谈深度学习的支撑技术,给大家介绍深度学习最常用的几类OpenCV操作。俗话说,一个好汉三个帮。深度学习的强项是对图像特征的理解,犹如人的大脑。然而,人不能只有大脑,还得有四肢。在图像处理上,深度学习最重要的帮手之一就是OpenCV。OpenCV是应用极其广泛的开源图像处理包,提供了方方面面的图像处理能力。
目标检测是深度学习取得突破性进展的领域之一。目标检测的基本含义是,对一张图片,找出所有感兴趣的目标。目标检测是应用非常广泛的计算机视觉技术。比如,对火车站、机场等的管理,我们很关心它的人流量。这时,就需要统计这些地方每个时刻有多少人。为此,就需要进行以人为对象的目标检测。
目标检测的研究已有几十年的历史,但发展一直缓慢,直到深度学习出现,它的性能才取得跃升。目前,常见图中的人物检测,准确度已达到99%以上,基本具备了实用性。
在目标检测完成后,如何给用户展示结果?图X是最常见的两种形式。要实现这两种效果,我们需要:(1) 将目标对应的子图,切割出来单独提供;或 (2)给每个目标绘制边界框,并且标明每个对象的类别。这些功能,借助OpenCV,可以很轻松地完成。在进入具体函数的讲解之前,我们补充一点图像表示的知识。

timg.jpg

1.图像表示
图像的表示方法有很多,但是一般常用的就是三原色叠加的方式,也就是常说的RGB,每个图像文件的存储格式有很多,比如PNG,JPG,GIF等,但是实质上存储的是图像每一个像素点RGB的值,如图0-1所示,图中十字形标识位置对应的RGB值分别为63,127和111。
0-1.png
图像读入OpenCV中后,表示成一个高度×长度×3的一个numpy的数组,如图1-1所示。
1-1.png
图1-1
Tips
(1)数据顺序。图像是按照高度、宽度和通道数的顺序进行存储,即HWC的顺序,在Tensorflow中要求数据按照CHW的顺序输入,因此需要进行一个变换。
(2)坐标变换。与平面坐标系进行对应,每一个通道是按照y,x的顺序进行存储,在进行目标检测等任务中得到的往往是x和y的坐标,在进行图像分割时,需要注意顺序。具体的原因可能是与数据存储往往习惯逐行存储有关。
2. 图像切割
图像切割就是从原始图像中获得感兴趣的子图。除了用于展示,切割还有很多的用处。比如人脸识别,第一步是人脸检测,然后根据检测将脸从原始图像中切分出来进行识别,从而减少无关信息对主要目标的影响。切分操作的代码,及效果如图2-1所示:
2-1.png

Tips
(1)一般人脸检测的结果表示为det所示的形式,由于一张图像中可能有多张人脸,因此,往往使用list来进行存储,每个元素表示一个可能人脸的位置,一般按照x_min,y_min,x_max,y_max的顺序进行排列,同时加上一个置信度,表示该结果的可能性。
(2)检测的结果中可能有一定的错误,因此需要进行位置的限定,保证结果在一个合理的范围。如果不进行限定,可能出现如图2-2所示的结果,切分出来的图像变成了一个长条,原因是由于在python中负值表示从后往前索引。而且这种错误往往导致程序能够真正运行,但是最终的结果出现错误。
2-2.png
(3)最后进行图像切分时,切记按照先y索引值,后x索引值的方式进行,否则可能产生越界错误,更严重的是程序能够正常运行,但是结果与预期不一致。
3. 图像加标注
图像加标注分为两个主要任务:加框与加文字标注。它们可用以下两个函数来完成:
(1)画边界框:cv2.rectangle(img,(x_min,y_min), (x_max,y_max), (B,G,R), Thickness) ,参数的意义分别如下:
img:目标图像
(x_min, y_min):框的左上角坐标
(x_max, y_max):框的右下角坐标
(B, G, R):框的颜色
Thickness:框线的宽度
(2)标注标签:cv2.putText(img,text, (x,y), Font, Size, (B,G,R), Thickness),参数的意义分别如下:
img:目标图像
text:待标注的文本
(x, y):文本的起始位置
Font:文本的字体
Size:文本的大小
(B, G, R):文字的颜色
Thickness:文字线条的精细
标注的示例代码与效果,如图3-1所示
tu3-1.png

Tips
1、框的越界问题。目前的检测方法,一般计算出来的是边界框的中心点位置以及高度和宽度,但是这些数据是有一定误差的,在转化为框的坐标时,需要判断结果是否在图像范围内,最小值是(0,0),而最大值是(宽度-1, 高度-1)!!!
2、原始图像变化的问题。对于这两个函数,不管是参数还是返回值,实际上都是同一个数据的引用,因此,对于数据的操作会"破坏"原始数据,如果该结果是最终展示结果,可以不考虑该问题,如果仅仅是中间结果,则可以借助copy模块来产生原始数据的副本进行处理,效果如图3-2所示。

4. 写在最后
人工智能在各行各业的应用大放异彩,从业者的薪资也不断高涨。越来越多的人,有意学习人工智能技术并从事人工智能的工作。无论你从事哪个行业、做什么工作,你都要了解一些人工智能技术。说不定,哪天人工智能的滚滚浪潮,就将你现在的行业颠覆了。
今天,我们给大家介绍的是深度学习最常用的OpenCV操作。这些操作,并不涉及深度学习算法。但是,对一个系统而言,算法只是一个部件。我们要用好深度学习技术,就不能只做算法,也要熟练掌握这些支撑技术,方能达到事半功倍的效果。

tu3-2.png
tu3-1.png
回复

使用道具 举报

19

主题

68

帖子

225

积分

论坛管理

Rank: 4

积分
225
发表于 2018-9-18 11:01:38 | 显示全部楼层
大神大神,能不能多更点东西出来,写的很好
回复

使用道具 举报

44

主题

139

帖子

382

积分

论坛管理

Rank: 4

积分
382
发表于 2018-9-30 18:30:55 | 显示全部楼层
下次更新把知识点写上
回复

使用道具 举报

38

主题

84

帖子

243

积分

中级会员

Rank: 3Rank: 3

积分
243
发表于 2018-10-3 10:35:14 | 显示全部楼层
出来咋到
请多多指教
回复

使用道具 举报

4

主题

37

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 2018-10-8 08:55:27 | 显示全部楼层
学习了学习了
回复

使用道具 举报

0

主题

32

帖子

80

积分

注册会员

Rank: 2

积分
80
发表于 2018-10-9 08:24:01 | 显示全部楼层
很适合初学者,比心!
回复

使用道具 举报

10

主题

57

帖子

143

积分

注册会员

Rank: 2

积分
143
发表于 2018-10-9 08:26:56 | 显示全部楼层
讲的还凑合吧,美女挺好看的哈哈哈
回复

使用道具 举报

10

主题

82

帖子

200

积分

中级会员

Rank: 3Rank: 3

积分
200
发表于 2018-10-9 11:13:23 | 显示全部楼层
非常好的教程
回复

使用道具 举报

2

主题

27

帖子

77

积分

注册会员

Rank: 2

积分
77
发表于 2018-10-10 08:07:30 | 显示全部楼层
I  want you!
回复

使用道具 举报

10

主题

57

帖子

143

积分

注册会员

Rank: 2

积分
143
发表于 2018-10-11 08:30:13 | 显示全部楼层

还可以吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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