0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

验证码识别之二值化介绍

电子设计 来源:电子设计 作者:电子设计 2020-12-10 20:50 次阅读

前言

二值化顾名思义就是将数变成两种值,一般非0即1。而在验证码处理中,如果直接使用灰度图,那么每个像素的值会在0-255,这样肯定会增加计算时间,而二值化后每个像素的值只是0和1。

在前面的简单验证码识别中,我的二值化代码是这样写的:a = (a > 180) * 255,至于这里为什么不乘1而乘255,因为我要显示图片看看效果。如果只是用于算法识别的话,乘1会更好。但是,这里的180也就是二值化的阈值是如何得到的,开始是通过一个一个试然后看效果哪个好就选哪个,因为我们一般只识别某个网站的验证码,这样只要测试几次得到结果后便可用于这个网站其他的验证码。

这样测试有点浪费时间,虽然是一次性的,但是你手动测出的验证码不一定是最合适的。所以我们需要算法去自动计算出验证码的阈值,算法有很多,这里我们使用迭代法和最大类间方差法,通过这两个算法计算出来的阈值基本差不多。

迭代法

  1. 求出图像中的最小灰度值和最大灰度值,分别记为Gmin和Gmax,则阈值初值T0=(Gmin+Gmax)/2;
  2. 根据阈值T0将图像分割成前景和背景两部分,求出两部分的平均灰度值m1和m2,平均灰度值=总灰度值/像素个数
  3. 求出新阈值T1=(m1+m2)/2
  4. 如果T0=T1,则结束,否则将T1的值赋予T0,从第2步重新计算。

算法实现如下:

import numpy as np
from PIL import Image

def iteration(img_path):
    img = Image.open(img_path).convert('L')
    a = np.array(img)
    a = a.ravel()
    k = int((int(a.max()) + int(a.min()))/2) # 即初始阈值T0
    m = -1
    while k != m:
        # C1和C2为前景和背景的像素
        C1 = a[a >= k]   
        C2 = a[a < k]
        k = m
        m1 = np.sum(C1)/len(C1) if len(C1) else 0
        m2 = np.sum(C2)/len(C2) if len(C2) else 0
        m = int((m1 + m2)/2)
    return k 

最大类间方差法(OTSU)

存在阈值T将图像所有像素分为前景和背景,则这两类像素各自的均值就为m1、m2,图像全局均值为mG。同时像素被分为前景和背景的概率分别为p1、p2。因此就有:
p1*m1+p2*m2=mG p1+p2=1 则类间方差表达式为:


使得上式值最大时的阈值T就是最佳的阈值。

算法实现如下:

import numpy as np
from PIL import Image

def otsu(img_path):
    img = Image.open(img_path).convert('L')
    a = np.array(img)
    a = a.ravel()
    L = []
    for k in range(0, 256):
        C1 = a[a >= k]
        C2 = a[a < k]
        if not(len(C1) and  len(C2)):
            L.append(0)
            continue
        m1 = np.sum(C1)/len(C1)
        m2 = np.sum(C2)/len(C2)
        p1 = len(C1)/len(a)
        p2 = len(C2)/len(a)
        x = p1 * p2 * (m1 - m2) * (m1 - m2)
        L.append(x)
    return L.index(max(L))

最后,我正在学习一些机器学习的算法,对于一些我需要记录的内容我都会分享到博客和微信公众号(python成长路),欢迎关注。平时的话一般分享一些爬虫或者Python的内容。

审核编辑 黄昊宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器学习
    +关注

    关注

    66

    文章

    8460

    浏览量

    133416
  • 二值化
    +关注

    关注

    0

    文章

    13

    浏览量

    4271
收藏 人收藏

    相关推荐

    嵌入式二维码识别引擎是什么设备?哪些场景用得到?

    在科技日新月异的今天,嵌入式技术已广泛渗透到我们生活的方方面面,其中,嵌入式二维码识别引擎作为一种高效、便捷的信息采集工具,正逐渐成为众多行业智能升级的重要推手。本文将带您深入探索二维码
    的头像 发表于 03-10 14:57 47次阅读
    嵌入式<b class='flag-5'>二维码</b><b class='flag-5'>识别</b>引擎是什么设备?哪些场景用得到?

    快速将二维码扫描识别模组嵌入集成到安卓一体机上使用

    在现代科技快速发展的今天,二维码扫描模组的应用已深入到各个行业领域。特别是在安卓一体机中,二维码扫描模组已成为其不可或缺的一部分。本文将详细介绍如何在安卓一体机上安装二维码扫描模组、连
    的头像 发表于 02-28 15:59 126次阅读
    快速将<b class='flag-5'>二维码</b>扫描<b class='flag-5'>识别</b>模组嵌入集成到安卓一体机上使用

    嵌入式二维码识别器嵌入到POS机里面,集成高性能硬解码扫方案

    嵌入式二维码识别器作为现代商业交易中的关键组件,其在POS机中的应用已经成为提升交易效率和客户体验的重要手段。通过将嵌入式二维码识别器集成到POS机中,并结合高性能硬解码扫
    的头像 发表于 02-19 13:59 131次阅读
    嵌入式<b class='flag-5'>二维码</b><b class='flag-5'>识别</b>器嵌入到POS机里面,集成高性能硬解码扫<b class='flag-5'>码</b>方案

    设备能识别哪些类型的 工业二维码扫描设备有什么推荐产品

    在当今智能制造与数字转型的浪潮中,扫设备作为信息识别与采集的关键工具,其重要性日益凸显。从简单的条形码到复杂多变的二维码,再到专为工业环境设计的工业
    的头像 发表于 12-18 15:13 415次阅读
    扫<b class='flag-5'>码</b>设备能<b class='flag-5'>识别</b>哪些类型的<b class='flag-5'>码</b> 工业<b class='flag-5'>二维码</b>扫描设备有什么推荐产品

    工业级二维码扫描模组有哪些特点?

    工业级二维码扫描模组是用于各种工业环境中,快速、准确地识别和解码二维码的关键设备。随着工业4.0和物联网的快速发展,工业级二维码扫描模组的应用范围越来越广泛,成为了许多自动
    的头像 发表于 12-02 15:02 230次阅读
    工业级<b class='flag-5'>二维码</b>扫描模组有哪些特点?

    工业视觉在条码/二维码识别领域的应用

    工业视觉技术在条码和二维码识别领域的应用日益广泛,它通过高精度的图像处理和识别算法,实现了对条码和二维码的快速、准确识别。这项技术不仅提高了
    的头像 发表于 11-18 16:28 392次阅读
    工业视觉在条码/<b class='flag-5'>二维码</b><b class='flag-5'>识别</b>领域的应用

    《DNK210使用指南 -CanMV版 V1.0》第三十八章 image识别实验

    的使用。本章分为如下几个小节:38.1 image模块识别方法介绍38.2 硬件设计38.3 程序设计38.4 运行验证 38.1 image模块
    发表于 11-13 09:35

    条码二维码模组,支持次开发嵌入吗?

    在当今信息化时代,条码二维码模组作为自动识别技术的关键设备,扮演着不可或缺的角色。它们不仅在工业制造、商业零售和医疗健康等领域大显身手,还在物流仓储和自助服务等场景中广泛应用。本文将深入探讨条码
    的头像 发表于 08-14 15:44 404次阅读
    条码<b class='flag-5'>二维码</b>扫<b class='flag-5'>码</b>模组,支持<b class='flag-5'>二</b>次开发嵌入吗?

    如何为柜式终端设备选配(集成)二维码模块?

    的设计与升级过程中,集成高性能的二维码模块是提升用户体验、优化业务流程的关键一环。首要考虑的是功能需求匹配,根据具体应用场景,甄选既能读取传统二维码又能识别屏幕
    的头像 发表于 08-05 15:48 383次阅读
    如何为柜式终端设备选配(集成)<b class='flag-5'>二维码</b>模块?

    新大陆扫器哪款能够识别DPM?新大陆二维介绍

    随着工业自动的不断发展,二维码和数据矩阵(DPM)在生产、物流和仓储等领域的应用越来越广泛。DPM因其高密度和小体积的特点,常常被应
    的头像 发表于 07-29 14:36 550次阅读
    新大陆扫<b class='flag-5'>码</b>器哪款能够<b class='flag-5'>识别</b>DPM<b class='flag-5'>码</b>?新大陆二维<b class='flag-5'>码</b>扫<b class='flag-5'>码</b>器<b class='flag-5'>介绍</b>

    生物识别验证在哪里开启

    识别验证的原理是利用生物特征的唯一性和稳定性,通过采集、分析和比对生物特征数据,实现对个体身份的识别验证。生物特征具有以下特点: 唯一性:每个人的生物特征都是独一无
    的头像 发表于 07-08 10:26 1782次阅读

    【Vision Board创客营连载体验】作品提交——二维码

    【项目介绍】 使用VisionBaord的openMV的智能图像识别功能,能准确的识别二维码,并解析出所携带的信息。 【实验方法】 1、下载官方的源码,使用menuconfig打开op
    发表于 06-07 16:47

    二维码模块嵌入到电梯设备里

    二维码模块在电梯设备中的应用1.二维码模块的基本介绍二维码
    的头像 发表于 05-08 10:40 450次阅读
    <b class='flag-5'>二维码</b>扫<b class='flag-5'>码</b>模块嵌入到电梯设备里

    远景达QR Code扫器模块在智能门锁上的应用,二维码模块详解

    传统门锁主要是支持如指纹、密码、门卡以及钥匙开锁这些基本的解锁方式,其实已经难以满足安全性、管理性和使用体验等新的需求。除了高端的人脸识别功能,像更加灵活和方便的二维码组件功能,这种最为
    的头像 发表于 04-01 15:29 551次阅读
    远景达QR Code扫<b class='flag-5'>码</b>器模块在智能门锁上的应用,<b class='flag-5'>二维码</b>模块详解

    远距离二维码扫描器如何选择?看看以下三款远距离二维码模块

    随着二维码相关技术及硬件的普及与低成本维条码扫描设备的应用被人们广为熟知,应用的行业也众多。然而,在某些场景中,由于需要远距离扫描二维码(条码远距离
    的头像 发表于 03-21 15:41 882次阅读
    远距离<b class='flag-5'>二维码</b>扫描器如何选择?看看以下三款远距离<b class='flag-5'>二维码</b>扫<b class='flag-5'>码</b>模块