二值化

6.二值化

天大地大妈咪最大 提交于 2019-11-30 05:55:34
在图像处理中,Thresholding中文翻译过来叫二值化或者阈值化。二值化就是把图片传换成只有white和black这两种颜色。通过Thresholding,可以让图片中感兴趣的颜色变成主角--white,其余的颜色全部隐藏--black。另外,二值化后的图片也便于计算机进行分析,因为边缘轮廓十分清晰,所以计算机可以轻松找到边界线。然而,在找边界这方面,Thresholding并不是特别好的算法,有些时候遇到某些特殊图片效果也不好。 #导入工具包 from imutils import * image = imread('image/coins.jpg') show(image) gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) plt.imshow(gray,'gray') plt.axis('off') plt.show() ret1,thresh1 = cv2.threshold(gray,127,255,cv2.THRESH_BINARY) ret2,thresh2 = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV) ret3,thresh3 = cv2.threshold(gray,127,255,cv2.THRESH_TRUNC) ret4,thresh4 = cv2

中国知网(CNKI)验证码识别

十年热恋 提交于 2019-11-30 05:51:43
中国知网(CNKI )是最重要的中文学术资源数据库,收录绝大多数中文学术刊物。我们可以检索论文,也可以导出检索结果前6000条论文的题录数据。 在CNKI检索结果翻页10次以上,用户需要手动输入验证码才能继续。为了实现自动化题录数据导出,我们就需要通过程序识别验证码。最终,基于Eugu.CV实现验证码识别,正确率在70%以上,能保证自动化导出过程的连贯。 CNKI验证码识别主要分为四个步骤: 1 去掉灰色干扰线 2 去掉干扰点 3 二值化 4 基于Tesseract识别 CNKI验证码是长这个样子。 首先,要去掉验证码图片的灰色干扰线,如图: 去掉干扰线的思路:干扰线都是灰色,而灰色的RGB三色的值相对来说都比较大,所以将RGB三色值均大于150的点的颜色设置成白色。代码如下: Bitmap bmp = (Bitmap)Image.FromFile(imagePath); for (int i = 0; i < bmp.Width; i++) { for (int j = 0; j < bmp.Height; j++) { Color color = bmp.GetPixel(i, j); int threshold = 150; if (color.R > threshold && color.G > threshold && color.B > threshold) {

基于opencv-python的车牌识别

江枫思渺然 提交于 2019-11-30 05:41:51
记一篇数字图像课程的实训 基于 opencv-python 的车牌识别,代码主要参考CSDN上几个版主的代码,对代码进行了一定的优化,一定程度上提高了识别的准确率。并重写了一个GUI界面,添加数据导出功能。 使用的模块: 主要模块: cv2 GUI 界面: PyQt5 其他模块: numpy os json time 版本: python:3.7.1 PyQt5:5.11.3 opencv-python:3.4.3.18 完整工程: GitHub: https://github.com/casuallyName/Python/tree/master/车牌识别 CSDN : https://download.csdn.net/download/fairytale__/11184445 先放一张运行截图: 基本实现流程: 读取图像 使用 cv2.imdecode() 函数将图片文件转换成流数据,赋值到内存缓存中,便于后续图像操作。使用 cv2.resize() 函数对读取的图像进行缩放,以免图像过大导致识别耗时过长。 降噪 使用 cv2.GaussianBlur() 进行高斯去噪。使用 cv2.morphologyEx() 函数进行开运算,再使用 cv2.addWeighted() 函数将运算结果与原图像做一次融合,从而去掉孤立的小点,毛刺等噪声。 # 高斯去噪 if blur > 0

【数字图像处理】腐蚀运算与膨胀运算

人盡茶涼 提交于 2019-11-29 17:55:37
形态学基本概念 基本思想:用一定形态的结构元素去度量和提取图像中的对应形状,达到分析知识的目的。可用于图像处理的各个方面,包括图像分割、边界检测、特征提取。 结构元素:形态学变换中的基本元素,使为了探测图像的某种结构信息而设计的特定形状和尺寸的图像,称为收集图像结构信息的探针。 结构元素有多种类型:如圆形、方形、线型等,可携带知识(形态、大小、灰度和色度信息)来探测、研究图像的结构特点。 形态学运算包括:二值化腐蚀和膨胀、二值化开闭运算、骨架抽取、击中击不中变换等。 形态学四个基本算子:膨胀,腐蚀、开启和闭合组成,这些基本运算还可以推导和组合成各种数学形态学实用算法。 腐蚀运算 腐蚀运算思路 :定义结构元素(与模板类似),结构元素在整幅图像中移动,移动到每个像素点上,只有结构元素与图像上对应像素点的像素值全部相等时,保留这个像素点的值。 腐蚀运算作用 :消除物体边界点,使边界点向内部收缩,可以把小于结构元素的物体去除。选取不同大小的结构元素,去除不同大小的物体。如两个物体间有细小的连通,通过腐蚀可以将两个物体分开。 腐蚀运算 : 腐蚀运算示意图 : 基本方法: 通常拖到结构元素在X域移动,在每一个位置上,当结构元素B在中心平移到X图像上的某优点(x,y)。 如果结构元素内的每一个像素都与以(x,y)为中心的相同邻域中对应像素完全相同,那么就保留(x,y)像素点。

通过可视化找到图片最佳的二值化的值

依然范特西╮ 提交于 2019-11-29 14:00:37
在图片预处理的过程中,我们常常需要二值化图片,但是二值化值一个个去试,比较麻烦。下面通过trackbar来可视化连续二值化图片的情景。代码如下: import cv2 def threshTrackbar(img): """ 使二值化图片过程可视化 :param img: 待二值化的灰度图 :return thr_v,Shading:阈值,大于阈值时替代的值 """ img_copy = img def nothing(x): pass # Create a window cv2.namedWindow('image') cv2.setMouseCallback('image', OnMouseAction) # create trackbars for color change cv2.createTrackbar('thr', 'image', 121, 255, nothing) cv2.createTrackbar('Shading', 'image', 255, 255, nothing) while (True): cv2.imshow('image', img) k = cv2.waitKey(1) & 0xFF # 通过关闭窗口的右上角关闭 if cv2.getWindowProperty('image', cv2.WND_PROP_AUTOSIZE) < 1:

图像的二值化原理和实现

与世无争的帅哥 提交于 2019-11-27 00:11:16
1、 图像的二值化的基本原理 图像的二值化处理就是讲图像上的 点的灰度置为 0 或 255 ,也就是讲整个图像呈现出明显的黑白效果。即将 256 个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,特别是在实用的图像处理中,以二值图像处理实现而构成的系统是很多的,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像,这样子有利于再对图像做进一步处理时,图像的集合性质只与像素值为 0 或 255 的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。为了得到理想的二值图像,一般采用封闭、连通的边界定义不交叠的区域。 所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为 255 表示,否则这些像素点被排除在物体区域以外,灰度值为 0 ,表示背景或者例外的物体区域。 如果某特定物体在内部有均匀一致的灰度值,并且其处在一个具有其他等级灰度值的均匀背景下,使用阀值法就可以得到比较的分割效果。如果物体同背景的差别表现不在灰度值上(比如纹理不同),可以将这个差别特征转换为灰度的差别,然后利用阀值选取技术来分割该图像。动态调节阀值实现图像的二值化可动态观察其分割图像的具体结果。 2、 图像的二值化的程序实现 以下程序是用QT实现的 bool convertGray:

【Python】Python3网络爬虫实战-41、图形验证码的识别

心已入冬 提交于 2019-11-26 05:16:04
本节我们首先来尝试识别最简单的一种验证码,图形验证码,这种验证码出现的最早,现在也很常见,一般是四位字母或者数字组成的,例如中国知网的注册页面就有类似的验证码,链接为: http://my.cnki.net/elibregister/commonRegister.aspx ,页面如图 8-1 所示: 图 8-1 知网注册页面 表单的最后一项就是图形验证码,我们必须完全输入正确图中的字符才可以完成注册。 1. 本节目标 本节我们就以知网的验证码为例,讲解一下利用 OCR 技术识别此种图形验证码的方法。 2. 准备工作 识别图形验证码需要的库有 Tesserocr,如果没有安装可以参考第一章的安装说明。 3. 获取验证码 为了便于实验,我们先将验证码的图片保存到本地,以供测试。 打开开发者工具,找到验证码元素,可以看到这是一张图片,它的 src 属性是 CheckCode.aspx,在这里我们直接将这个链接打开:就可以看到一个验证码,直接右键保存下来即可,将名称命名为 code.jpg,学习过程中有不懂的可以加入我们的学习交流秋秋圈784中间758后面214,与你分享Python企业当下人才需求及怎么从零基础学习Python,和学习什么内容。相关学习视频资料、开发工具都有分享如图 8-2 所示: ![( https://upload-images.jianshu.io/upload

【Python】Python3网络爬虫实战-42、图形验证码的识别

喜你入骨 提交于 2019-11-26 05:15:43
本节我们首先来尝试识别最简单的一种验证码,图形验证码,这种验证码出现的最早,现在也很常见,一般是四位字母或者数字组成的,例如中国知网的注册页面就有类似的验证码,链接为: http://my.cnki.net/elibregister/commonRegister.aspx ,页面如图 8-1 所示: 图 8-1 知网注册页面 表单的最后一项就是图形验证码,我们必须完全输入正确图中的字符才可以完成注册。 1. 本节目标 本节我们就以知网的验证码为例,讲解一下利用 OCR 技术识别此种图形验证码的方法。 2. 准备工作 识别图形验证码需要的库有 Tesserocr,如果没有安装可以参考第一章的安装说明。 3. 获取验证码 为了便于实验,我们先将验证码的图片保存到本地,以供测试。 打开开发者工具,找到验证码元素,可以看到这是一张图片,它的 src 属性是 CheckCode.aspx,在这里我们直接将这个链接打开: http://my.cnki.net/elibregister/CheckCode.aspx ,就可以看到一个验证码,直接右键保存下来即可,将名称命名为 code.jpg,学习过程中有不懂的可以加入我们的学习交流秋秋圈784中间758后面214,与你分享Python企业当下人才需求及怎么从零基础学习Python,和学习什么内容。相关学习视频资料、开发工具都有分享如图 8-2