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 two_value(imagePath, listhourd):"""图像二值化:param imagePath:原始未处理图像文件路径:param listhourd: 二值化阈值,0-255:return: 返回Image文件类型"""# 图像二值化image = Image.open(imagePath)# 灰度图im = image.convert('L')threshold = listhourdtable = []for j in range(256):if j < threshold:table.append(0)else:table.append(1)im = im.point(table, 'L')return im

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

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

三. 成图检验分析

(一). 思路

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

(二). 筛选数据导出

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

代码如下:

# In[011]:
from PIL import Image
import numpy as np
import csvdef fitler_two_value_black(image, filterValue):"""筛选二值化后的差图"""im = imagedata = im.getdata()w, h = im.sizeblack_point = 0# 省去外轮廓,减少非去除噪点干扰for x in range(10, w - 1):for y in range(15, h - 1):pixelData = im.getpixel((x, y))if (pixelData < filterValue):black_point += 1# im.show()#print("像素占比:", black_point * 100 / (w * h), "%")return black_point * 100 / (w * h)def anlyze():print("start to write ")header = ["captcha","label","black_point_count"]with open("./去噪后验证码像素比例分析.csv","w",newline="") as csvFile:csvWriter = csv.writer(csvFile)csvWriter.writerow(header)for i in range(1, 5001):imagePath = "./testCompResult/" + str(i) + ".jpg"im = Image.open(imagePath)point = fitler_two_value_black(im, 1)listg = [str(i) + ".jpg", "label_None", str(point)]csvWriter.writerow(listg)csvFile.close()print("finish!")anlyze()

(三). 数据可视化分析

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

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

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

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

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

单张图像放大展示:

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

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

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

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

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

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

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

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

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

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

# In[011]:
from PIL import Image
import numpy as np
import cv2def gammaChange(imagePath, gamma_value):"""基于opencv的伽马变换,对图像对比度处理,但是保存后的图像貌似不太对劲,处理黑图:param imagePath:原始文件路径:return:numpy类型的 opencv 封装类型,需要使用cv2.imshow(),imwrite()操作"""img = cv2.imread(imagePath, cv2.IMREAD_GRAYSCALE)# 图像归一化fi = img / 1# 伽马变换out = np.power(fi, gamma_value)return out

六. 降除效果可视化

point 无明显偏移情况。

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

七. 最终效果

八. 不足之处

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

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

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

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

九. 交流与源代码获取

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

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

个人网站​www.ganahe.top

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

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

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

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

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

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

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

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

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

  5. 【OpenCV案例实战分享】关于图像处理的一些基本操作之二值化、图像加噪处理......

    导语

  6. python3 opencv 基于二值化图像素投影的图片切割方法

    对于一些背景纯色,结构相对简单的图,可以利用传统的opencv图像处理进行分割.先来记录一下基于二值化图像素投影的图片切割方法的实现.比如下面这张图,可以利用这个算法进行切割.(源代码在最后面) 切割 ...

  7. input自适应_【正点原子FPGA连载】第十一章基于OV5640的自适应二值化实验-领航者ZYNQ之HLS 开发指南...

    1)摘自[正点原子]领航者ZYNQ之HLS 开发指南 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手 ...

  8. opencv 二值化_Python-OpenCV获取图像轮廓的图像处理方法

    一.引言 在<OpenCV阈值处理函数threshold处理32位彩色图像的案例>介绍了threshold 函数,但threshold 的图像阈值处理对于某些光照不均的图像,这种全局阈值分 ...

  9. 基于ImagePy工具的岩块图像二值化分割研究

    看到自己一年前在知乎提的问题了,忍不住回答下. 下面这个是论文录用后修改稿,文末有编辑的评语. 基于ImagePy工具的岩块图像二值化分割研究 摘 要:在岩块图像分析识别前的预处理工作中,为了平滑岩块 ...

最新文章

  1. sysenter Hook
  2. const和readonly
  3. 韩顺平循序渐进学java 第19讲 多维数组
  4. spring+mybatis 框架搭建
  5. 【实践】SimSvr在微信推荐系统中的应用实践
  6. 我就是这样顺利拿到腾讯和微软的offer,
  7. Web自动化测试框架-PO模式
  8. 哈工大2022形式语言与自动机期末
  9. 在Excel表中进行度分秒单位转换
  10. 一年级古诗《画》知识点心田花开汇总
  11. vscode自动补全c语言_vscode代码自动补全失效
  12. 【安信可首款4G模组CA-01直连阿里物联网平台①】产品创建
  13. 十年前的知识产权战争 | 历史上的今天
  14. 办理营业执照注册要什么费用
  15. 国内的IT生意,敢问路在何方?
  16. 面试官:你对Redis缓存了解吗?面对这11道面试题你是否有很多问号?
  17. FastDFS集群环境搭建(五)FastDFS监控器fdfs_monitor
  18. Python小记 正则
  19. 6、幻灯管理 - 后端功能开发 - 微擎小程序模块应用开发
  20. matlab启发式算法实例_网页设计中的30个启发性插图实例

热门文章

  1. PAT:组个最小数(C++)
  2. 数据库系列(二):数据库基础02
  3. 采样率,码率,帧率,I 帧,P 帧,B帧,RTP时间戳
  4. 利用Python发送短信,用处多多
  5. 用Python盘点那些豆瓣评分低于3.0的奇葩电影
  6. selenium的基本使用
  7. 问题记录 | SpringMVC整合jackson版本问题
  8. 将下载都是大写字母的网页里面的html转换为小写的简单方式
  9. 学习UpdatePanel控件
  10. 《scikit-learn》随机森林之回归