国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    8553

    瀏覽量

    136931
  • 二值化
    +關注

    關注

    0

    文章

    13

    瀏覽量

    4430
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    遠景達LV4300N二維碼讀頭:多場景適配的高效識別利器

    在數字轉型加速的當下,二維碼識別設備已成為零售、物流、智慧城市等領域的核心交互組件,而遠景達LV4300N二維碼讀頭憑借卓越性能,成為市場上備受青睞的
    的頭像 發表于 01-20 15:52 ?176次閱讀
    遠景達LV4300N<b class='flag-5'>二維碼</b>讀頭:多場景適配的高效<b class='flag-5'>識別</b>利器

    二維碼掃描識別器有內嵌款嗎?掃識別的功能是嵌入在自助機上的

    在自助設備遍布生活場景的今天,不少人會疑惑“二維碼掃描識別器有內嵌款嗎?”答案是肯定的——內嵌式二維碼掃描識別器早已成為自助機的核心配置,從商場的自動售賣機到火車站的自助取票機,掃
    的頭像 發表于 12-04 16:19 ?397次閱讀
    <b class='flag-5'>二維碼</b>掃描<b class='flag-5'>識別</b>器有內嵌款嗎?掃<b class='flag-5'>碼</b><b class='flag-5'>識別</b>的功能是嵌入在自助機上的

    二維碼模塊是什么?它和普通條碼識別設備有什么不同

    在物聯網技術飛速發展的今天,條碼與二維碼已成為信息傳遞的重要載體,從超市結賬到工業生產溯源,從移動支付到醫療耗材管理,相關識別設備無處不在。其中,二維碼模塊作為核心
    的頭像 發表于 11-06 15:54 ?502次閱讀
    <b class='flag-5'>二維碼</b>掃<b class='flag-5'>碼</b>模塊是什么?它和普通條碼<b class='flag-5'>識別</b>設備有什么不同

    【嘉楠堪智K230開發板試用體驗】+二維碼識別

    二維碼識別 二維碼識別本質上是一個通過圖像處理技術定位并矯正圖像中的二維碼區域,然后根據其特定編碼規則讀取黑白模塊的
    發表于 08-22 20:16

    自動測試如何繞過Cloudflare驗證碼?Python + Selenium 腳本實戰指南!

    01什么是Cloudflare驗證碼Cloudflare提供網絡工具,并提供一套全面的安全功能,以保護網站免受各種在線威脅。Cloudflare驗證碼是一種用于區分人類用戶和自動機器人的功能。它是
    的頭像 發表于 08-15 10:01 ?1306次閱讀
    自動<b class='flag-5'>化</b>測試如何繞過Cloudflare<b class='flag-5'>驗證碼</b>?Python + Selenium 腳本實戰指南!

    如何更好選擇二維碼識別掃描器廠家?

    在采購二維碼識別掃描器時,選對廠家直接影響設備的使用效果和后續保障。想要找到靠譜的合作方,以下幾個關鍵因素值得重點考量:?產品品質是核心二維碼識別掃描器的品質直接決定了使用體驗,這其中
    的頭像 發表于 08-13 16:09 ?870次閱讀
    如何更好選擇<b class='flag-5'>二維碼</b><b class='flag-5'>識別</b>掃描器廠家?

    GM861條二維碼識別模塊用戶手冊

    GM861條二維碼識別模塊用戶手冊
    發表于 07-09 14:56 ?1次下載

    基于STM32的二維碼識別源碼+二維碼解碼庫lib

    基于STM32的二維碼識別源碼+二維碼解碼庫lib,推薦下載!
    發表于 05-28 22:04

    基于LockAI視覺識別模塊:C++二維碼識別

    : 輸出參數,用于存儲帶有可視結果的輸出圖像。 results: 輸入參數,表示二維碼檢測的結果集。每個Result對象包含二維碼的位置信息和解碼后的文本內容。 返回: 無 3
    發表于 05-26 09:57

    基于LockAI視覺識別模塊:C++二維碼識別

    二維碼識別是視覺模塊經常使用到的功能之一。我們將演示如何使用基于瑞芯微RV1106的LockAI視覺識別模塊進行二維碼識別
    的頭像 發表于 05-26 09:42 ?1005次閱讀
    基于LockAI視覺<b class='flag-5'>識別</b>模塊:C++<b class='flag-5'>二維碼</b><b class='flag-5'>識別</b>

    基于STM32的二維碼識別源碼+二維碼解碼庫lib

    基于STM32的二維碼識別源碼+二維碼解碼庫lib項目實例下載! 純分享帖,需要者可點擊附件免費獲取完整資料~~~【免責聲明】本文系網絡轉載,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請第一時間告知,刪除內
    發表于 05-23 20:45

    基于RK3576開發板的二維碼識別算法

    了快速上手指南,包括源碼管理、開發環境搭建、例程編譯與運行等步驟,并詳細介紹二維碼識別API的使用方法及調用示例。通過API函數qr_decode,用戶可以輕松實現二維碼
    的頭像 發表于 05-10 09:25 ?969次閱讀
    基于RK3576開發板的<b class='flag-5'>二維碼</b><b class='flag-5'>識別</b>算法

    基于RV1126開發板實現二維碼識別方案

    在RV1126上實現二維碼識別方案
    的頭像 發表于 04-11 14:48 ?755次閱讀
    基于RV1126開發板實現<b class='flag-5'>二維碼</b><b class='flag-5'>識別</b>方案

    一“”當先!看二維碼模組如何重塑智能門鎖掃體驗

    在科技日新月異的今天,智能門鎖正逐步取代傳統機械鎖,成為現代家庭安全防護的首選。在這場門鎖智能革命中,二維碼模組以其獨特的識別技術和便捷的操作方式,成為智能門鎖的重要組成部分。本文將深入探討
    的頭像 發表于 03-12 16:17 ?1054次閱讀
    一“<b class='flag-5'>碼</b>”當先!看<b class='flag-5'>二維碼</b>模組如何重塑智能門鎖掃<b class='flag-5'>碼</b>體驗

    嵌入式二維碼識別引擎是什么設備?哪些場景用得到?

    在科技日新月異的今天,嵌入式技術已廣泛滲透到我們生活的方方面面,其中,嵌入式二維碼識別引擎作為一種高效、便捷的信息采集工具,正逐漸成為眾多行業智能升級的重要推手。本文將帶您深入探索二維碼
    的頭像 發表于 03-10 14:57 ?816次閱讀
    嵌入式<b class='flag-5'>二維碼</b><b class='flag-5'>識別</b>引擎是什么設備?哪些場景用得到?