深度學習——cv2 二值化技術

一、理論基礎

1、二值化的目的是什麼?

二值化是將輸入圖像轉換為只有兩種亮度值的黑白圖像的過程。這是由於黑色和白色是最簡單的顏色,黑白圖像的信息量較小、易於處理和分析。在圖像處理領域,二值化技術被廣泛應用於圖像增強、分析、識別等任務。

2、基於閾值的二值化方法的原理是什麼?

基於閾值的二值化方法是最常用的方法,其基本原理是將像素點的灰度值與一個預先給定的閾值進行比較,大於該閾值的像素灰度值設為最大值255(代表白色),小於該閾值的像素灰度值設為最小值0(代表黑色),從而只保留黑色和白色兩種顏色。

3、全局二值化與局部二值化有什麼區別?

全局二值化是基於整幅圖像的像素灰度值的分布情況確定一個全局閾值,將整幅圖像分為黑白兩部分。局部二值化則是將圖像分成許多小區域,每個小區域計算一個局部閾值,並將該區域內的像素點進行二值化。

4、otsu閾值分割演算法是如何工作的?

Otsu閾值分割演算法是一種自適用的二值化方法,它會計算灰度圖像的全局閾值,使得背景和前景之間的方差最大化。該演算法基於灰度直方圖,遍歷所有可能的閾值,並計算背景和前景的方差。最終演算法會選擇一個被分割為背景和前景的圖像中,方差最大的閾值。

二、代碼實現

1、基於閾值的全局二值化方法

import cv2

img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 全局閾值二值化方法
ret,thresh1 = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)

cv2.imshow('global threshold', thresh1)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述代碼中,通過cv2.imread()函數載入一張圖片,通過cv2.cvtColor()函數將彩色圖像轉為灰度圖像。然後使用cv2.threshold()函數對灰度圖像進行全局二值化處理,並設定閾值為127,二值化方法為cv2.THRESH_BINARY。

2、基於閾值的局部二值化方法

import cv2

img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 局部閾值二值化方法
thresh2 = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_MEAN_C,\
cv2.THRESH_BINARY,11,2)

cv2.imshow('adaptive threshold', thresh2)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述代碼中,同樣是載入一張圖片並將其轉化為灰度圖像。然後通過cv2.adaptiveThreshold()函數實現局部閾值二值化。其中,參數cv2.ADAPTIVE_THRESH_MEAN_C指定計算局部閾值時,像素點使用的值為相鄰區域的平均值。而參數11和2分別表示相鄰區域的尺寸和閾值C的大小。

3、Otsu閾值分割演算法

import cv2

img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# Otsu閾值分割二值化方法
ret, thresh3 = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)

cv2.imshow('Otsu threshold', thresh3)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述代碼通過cv2.threshold()函數實現Otsu閾值分割二值化。其中,參數cv2.THRESH_OTSU表示使用Otsu閾值分割演算法確定閾值。注意,在使用Otsu閾值分割演算法時,設定閾值的參數無需手動指定,程序會自動計算並選擇最優閾值。

三、應用場景

1、字元識別:

在自動化識別、運單條形碼等場景中,使用全局或局部閾值二值化方法將圖片轉為黑白二值圖像,可以提高字元識別的準確率。

2、卡片識別:

在銀行卡、身份證等卡片識別場景中,往往需要將卡片區域進行二值化處理,在卡片區域輪廓被提取出來之後,可以更快速、準確地識別卡片信息。

四、使用注意事項

1、設定閾值時應根據具體應用場景,選擇適合的閾值方法和閾值值。

2、在使用全局閾值二值化方法時,應注意對象和背景的灰度分布情況,以免出現二值化後背景變成前景情況,或者讓前景部分出現大片黑色區域。

3、在使用局部閾值二值化方法時,應注意選擇相鄰區域大小和閾值C的大小,過大或過小都會影響二值化後的效果。

4、在使用Otsu閾值分割演算法時,應注意輸入圖像的質量和清晰度,過暗或過曝的圖像可能會影響Otsu閾值分割的效果。

五、總結

本文介紹了基於閾值的二值化技術。首先對二值化技術的目的和基本原理進行了介紹,並對全局二值化、局部二值化、Otsu閾值分割演算法進行了詳細的講解。同時,本文結合代碼實現和應用場景,對二值化技術的使用注意事項進行了總結。希望本文能夠幫助讀者更好地理解和應用基於閾值的二值化技術。

原創文章,作者:GVYED,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/361102.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
GVYED的頭像GVYED
上一篇 2025-02-24 00:34
下一篇 2025-02-24 00:34

相關推薦

  • Python熱重載技術

    Python熱重載技術是現代編程的關鍵功能之一。它可以幫助我們在程序運行的過程中,更新代碼而無需重新啟動程序。本文將會全方位地介紹Python熱重載的實現方法和應用場景。 一、實現…

    編程 2025-04-29
  • 深度查詢宴會的文化起源

    深度查詢宴會,是指通過對一種文化或主題的深度挖掘和探究,為參與者提供一次全方位的、深度體驗式的文化品嘗和交流活動。本文將從多個方面探討深度查詢宴會的文化起源。 一、宴會文化的起源 …

    編程 2025-04-29
  • Python包絡平滑技術解析

    本文將從以下幾個方面對Python包絡平滑技術進行詳細的闡述,包括: 什麼是包絡平滑技術? Python中使用包絡平滑技術的方法有哪些? 包絡平滑技術在具體應用中的實際效果 一、包…

    編程 2025-04-29
  • 微信小程序重構H5技術方案設計 Github

    本文旨在探討如何在微信小程序中重構H5技術方案,以及如何結合Github進行代碼存儲和版本管理。我們將從以下幾個方面進行討論: 一、小程序與H5技術對比 微信小程序與H5技術都可以…

    編程 2025-04-28
  • parent.$.dialog是什麼技術的語法

    parent.$.dialog是一種基於jQuery插件的彈出式對話框技術,它提供了一個方便快捷的方式來創建各種類型和樣式的彈出式對話框。它是對於在網站開發中常見的彈窗、提示框等交…

    編程 2025-04-28
  • Python下載深度解析

    Python作為一種強大的編程語言,在各種應用場景中都得到了廣泛的應用。Python的安裝和下載是使用Python的第一步,對這個過程的深入了解和掌握能夠為使用Python提供更加…

    編程 2025-04-28
  • HTML sprite技術

    本文將從多個方面闡述HTML sprite技術,包含基本概念、使用示例、實現原理等。 一、基本概念 1、什麼是HTML sprite? HTML sprite,也稱CSS spri…

    編程 2025-04-28
  • Python工作需要掌握什麼技術

    Python是一種高級編程語言,它因其簡單易學、高效可靠、可擴展性強而成為最流行的編程語言之一。在Python開發中,需要掌握許多技術才能讓開發工作更加高效、準確。本文將從多個方面…

    編程 2025-04-28
  • Python遞歸深度用法介紹

    Python中的遞歸函數是一個函數調用自身的過程。在進行遞歸調用時,程序需要為每個函數調用開闢一定的內存空間,這就是遞歸深度的概念。本文將從多個方面對Python遞歸深度進行詳細闡…

    編程 2025-04-27
  • 開源腦電波技術

    本文將會探討開源腦電波技術的應用、原理和示例。 一、腦電波簡介 腦電波(Electroencephalogram,簡稱EEG),是一種用於檢測人腦電活動的無創性技術。它通過在頭皮上…

    編程 2025-04-27

發表回復

登錄後才能評論