title: 【python】基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析 type: categories copyright: true categories: 可视化 tags: - Python - 数据可视化 abbrlink: 38231785 date: 2020-03-15 20:18:49 updated: comments:


一. 前言与说明

参与一个比赛需要对项目中的验证码进行降噪处理,以便后续的工作。

但是该图像集(5000张)构成十分复杂,有部分图像背景色与字符颜色极为相近甚至达到人眼难以辨别的程度。

例如下图的528.jpg。

二. 初步思路及效果

采用PIL的方法对原始图像读取并处理像素。

转为灰度图像,随后二值化并进行降噪处理。

转换并二值化的算法代码如下:

def 

此时效果对于大部分图像尚可。

但同时也发现有部分黑图,以及噪点极多的图像,且大多数图像的噪点仍然比较多,不是很干净。

三. 成图检验分析

(一). 思路

  1. 将处理后的图像集进行遍历,筛选出质量较差的图像,并按照序号所引进行处理;
  2. 将影像像素值统计;
  3. 可视化分析找出差异特征并处理图像;
  4. 成果​导出。​

(二). 筛选数据导出

将筛选的图像特征数据导出到 csv 文件中。

代码如下:

# In[011]:

(三). 数据可视化分析

离散分布图中,明显可见检测的黑色点所占百分比有部分图像的 point 值超过了平均值7.6,此即为黑图,小于 5 的为残缺较为严重的图像。

四. 新处理思想探索与效果(较为显著)

(一). 使用 OpenCV 灰度灰度图再进行二值化降噪

此步有利于避免前一步的黑图。

但也引入了新的问题,就是对灰度图的二值化引入了很多噪点:

单张图像放大展示:

对该图再去噪又会破坏文字的完整性,且效果比较差,减小阈值又会造成所需特征缺失,如下图:

(二). 基于 openCV 加入高斯滤波

(三). 对加入滤波后的图像再次进行二值化并去噪

至此,降噪基本达到效果,背景噪点数量极少,字符显示极为清晰透亮,白白净净。

五. 残缺图的产生与验证增强

经过前一步的处理后,虽说去噪效果极好,但我们发现部分图像的字符有所残缺。

经过多次认证测试,摸索出的新办法思想如下:

以上流程部分内容代表去噪算法。

以上为图像增强测试主要过程及效果,下面对图像集进行批量处理 :

其中测试用到的增强对比度的算法为伽马算法:

# In[011]:

六. 降除效果可视化

point 无明显偏移情况。

对比图像,去噪效果较为明显,原残缺图像得到增强。

七. 最终效果

八. 不足之处

部分字符颜色与背景色极为接近的图像,在经过处理后,在字符区域会

造成团簇状黑斑,或是字符消失,解决这一问题,需要用到基于

TensorFlow 等框架的深度学习去完成了。

但根据下图的去噪效果分析可见,该类残缺图所占比重较少,具体占比需要依据个人的数据训练集的质量而定:

九. 交流与源代码获取

源代码目前仍在完善中,尚未同步到 GitHub 仓库,有学习需要的伙伴或是想要了解更多内容,请到本人WX

公众号查找往期文章,需要代码可后台回复或是文章内直接获取:

个人网站​www.ganahe.top

opencv 轮廓放大_基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析...相关推荐

  1. cv2 inrange灰度图_基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析...

    title: [python]基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析 type: categories copyright: true categories ...

  2. opencv 轮廓放大_使用OpenCV和Python构建自己的车辆检测模型

    总览 对智慧城市的想法感到兴奋吗? 您会喜欢本教程,内容是构建自己的车辆检测系统. 首先,我们将了解如何在视频中检测运动物体,然后再进入实践部分. 介绍 我喜欢智慧城市的想法.关于自动化智能能源系统, ...

  3. c# opencv 轮廓检测_基于OpenCV的区域分割、轮廓检测和阈值处理

    OpenCV是一个巨大的开源库,广泛用于计算机视觉,人工智能和图像处理领域.它在现实世界中的典型应用是人脸识别,物体检测,人类活动识别,物体跟踪等. 现在,假设我们只需要从整个输入帧中检测到一个对象. ...

  4. Python+OpenCV图像处理(五)——图像阈值和二值化

    系列文章 Python+OpenCV图像处理(一)--OpenCV框架与图像插值算法 Python+OpenCV图像处理(二)--几何变换 Python+OpenCV图像处理(三)--彩色空间互换 P ...

  5. java图像灰度直方图_图像灰度变换、二值化、直方图

    1.灰度变换 1)灰度图的线性变换 Gnew = Fa * Gold + Fb. Fa为斜线的斜率,Fb为y轴上的截距. Fa>1 输出图像的对比度变大,否则变小. Fa=1 Fb≠0时,图像的 ...

  6. 图像处理 基于Visual C++编程 学习笔记 (3)显示灰度图像和二值化图像

    灰度图imggray 有了上面的基础,灰度图就相当简单了 彩色图转灰度方法: 1.浮点算法:Gray=R*0.3+G*0.59+B*0.11  2.整数方法:Gray=(R*30+G*59+B*11) ...

  7. opencv 边缘平滑_基于OpenCV的车道检测实现(一)

    无人驾驶的话题日趋起热,而车道线检测对于无人驾驶的路径规划来讲特别重要.要遵守交通规则,首先的要求便是对车道线检测,而且通过检测车道线可以进一步的检测地面指示标志.进行前碰撞预警策略设计等. 早早就对 ...

  8. c++opencv汉字分割_基于OpenCV 的车牌识别

    车牌识别是一种图像处理技术,用于识别不同车辆.这项技术被广泛用于各种安全检测中.现在让我一起基于OpenCV编写Python代码来完成这一任务. 车牌识别的相关步骤 1.车牌检测:第一步是从汽车上检测 ...

  9. java opencv bp网_基于Opencv自带BP网络的车标简易识别

    记得把这几点描述好咯:代码实现过程 + 项目文件结构截图 + 演示效果 1.准备工作 1.1 训练集和测试集准备 先将数据集手动划分成训练集和测试集,并分好类,比如第一类就放在文件夹名为0的文件夹下, ...

最新文章

  1. 集合、泛型、增强for
  2. javascript 之 push方法
  3. openssl生成rsa密钥对和密钥格式转换
  4. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1053:最大数输出
  5. amd r5 m330 linux驱动下载,AMDAMD Radeon(TM) R5 M330 14.502.1014.0000显卡驱动官方正式版下载,适用于win8.1-64-驱动精灵...
  6. 二叉树的先序、中序、后序遍历等基本操作c++实现
  7. Apache会比路虎的应急效果更好
  8. IBM MQ - 连接远程队列管理器报AMQ4036错误
  9. 103.及时清除缓存
  10. 整合了一个命令行程序的框架(1)
  11. 怎么对linux系统的硬盘检测,详解Linux系统中hdparm硬盘检测工具的使用
  12. dz论坛php如何使用html模板,discuz模板制作 discuz怎样制作微信模板
  13. 百度祝恒书:百度智能招聘技术和应用实践
  14. pythonGUI(二)基本元素之二
  15. 三种方法求递归算法的时间复杂度(递推,master定理,递归树)
  16. 安科瑞电气火灾监控系统对分散在建筑内的探测器进行遥测、遥调、遥控、遥信,方便实现监控与管理。
  17. ActiveMQ连接数过多,导致ActiveMQ无法正常接入数据
  18. 【我们是冠军】2021年大数据领域第一名の博客之星活动复盘
  19. Cocos 配置 FMOD EX
  20. echarts 点击地图画布空白处 触发事件

热门文章

  1. 【英语学习】【Level 07】U03 Amazing wonders L2 A global city
  2. 【英语学习】【医学】无机化学 - 化合物命名(1) - 离子化合物
  3. 【英语学习】【WOTD】chockablock 释义/词源/示例
  4. tp5中php正则怎么写,详解tp5中phpmailer的使用
  5. mysql映射成hashmap_大厂面试必问!HashMap 怎样解决hash冲突?
  6. 瀑布流式页面布局_微信小程序——实现简单的瀑布流式布局
  7. centos7环境下搭建storm集群
  8. C++开源矩阵计算工具——Eigen的简单用法(三)
  9. 国外大学生谈经验:如何在Github参与开源(Open Source on Github: Your First Contribution)
  10. mqtt如何发送心跳 安卓_互联网推送服务原理:长连接+心跳机制(MQTT协议)