OpenCV入门笔记(七) 文字区域的提取
来源:互联网 发布:淘宝上的皮鞋 编辑:程序博客网 时间:2024/06/11 21:04
前面我们已经学了一些OpenCV中基本的图片处理的知识,可以拿来做一些小应用。比如怎样从一张图片中,把文字圈出来。这一步骤对OCR(Optical Character Recognition)非常有用,因为一般的OCR引擎只是拿来识别文字,并没有对图片做预处理,因此精度可能会收到图片质量影响。
当然,我们这里只是粗略的查找文字区域,并没有进一步地处理图片。而且对背景复杂,或者文字旋转角度过于倾斜的情况也无法自适应,因此只能给大家做参考。若要实用到项目中,还有很多工作要做。
效果图
比如我们有下面的一篇文章的截图,想把其中的文字区域全部找出来。
当然这里的截图只有文字和白花花的背景,效果会非常好。绿色的的矩形框的是我们根据检测到的文字区域,手动画出来的。
原理
那么我们是怎么做到检测到区域的呢?
首先,我们会注意到,文字区域和其他的图片背景很不一样。我们用膨胀处理图片,让文字变成一块块大区域,然后识别整块的轮廓,用矩形去框住这个轮廓。
这个程序分三个子函数,detect(检测),preprocess(图片预处理),findTextRegion(查找和筛选文字区域)。即main函数调用detect函数去实际完成文字区域检测。detect函数又分成preprocess和findTextRegion两个步骤来做。
见下面的序列图,可能会清晰点。
1. Detect
先来看main函数和Detect函数
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
2. Preprocess
利用数学形态学(Morphology)进行预处理。
这个过程很重要,是文字区域检测效果好坏的核心代码,尤其是一下几个参数:
- 膨胀的核函数大小,这里用了
30 x 9
,可以调节 - 腐蚀的核函数大小,这里用了
24 x 6
,可以调节
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
3. findTextRegion
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
完整代码
加上头文件,把几个函数合并以后,贴在这里。注意开头要写明用utf8编码,不然中文注释可能不会被系统识别。而且Python没有花括号来控制流程,所以对看不见的Tab缩进很敏感,写代码的时候要规范。
直接在终端里敲下面的命令,既可以运行
python textDetection.py ./pic/1.png
代码:textDetection.py
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- OpenCV入门笔记(七) 文字区域的提取
- OpenCV入门笔记(七) 文字区域的提取
- OpenCV入门笔记(七) 文字区域的提取
- OpenCV 文字区域的提取
- OpenCV 文字区域的提取
- Opencv实战(二) 文字区域的提取 (VS2013 + C++)
- 文字区域的提取
- OPENCV学习笔记 提取连通区域的轮廓
- 条形码区域的提取--python(opencv)
- opencv 提取感兴趣区域 (新版方法)
- opencv提取ROI区域
- opencv-车牌区域提取
- 【OpenCV学习笔记 010】提取直线、轮廓及连通区域
- 【OpenCV学习笔记 010】提取直线、轮廓及连通区域
- OpenCV(七) Opencv中 core 核心模块详解—提取感兴趣区域Roi
- OpenCV区域提取之利用Rect提取在源代码中预先定义好的区域!
- OpenCV提取轮廓的方法获取瞳孔区域及中心
- 基于OpenCV实现的极值区域(Extremal Region)提取
- Spring 配置基础
- 算法导论 练习题 3.2-4
- java操作数据库—SqlHelper(读取properties文件)
- 离线安装Chrome Postman 和Postman Interceptor 插件
- C#权威指南读书笔记——001
- OpenCV入门笔记(七) 文字区域的提取
- 软件测试——PreDate函数
- 重新启动Linux的学习之旅(20170319)
- 赛高游戏引擎重构(二)Game Config
- 编译技术初探-作业摘抄
- 女朋友总是无理取闹怎么办 10种不能要的女朋友
- Hibernate配置文件和核心配置文件及其API详解
- 安卓图片压缩处理的终极方法,适用于各种机型
- 梯度下降法