Python實(shí)現(xiàn)圖片二值化的詳細(xì)代碼
1. 什么是二值化
圖像二值化就是將圖像上的像素點(diǎn)的“灰度值”設(shè)置為[0, 0, 0]或[255, 255, 255],即要么純黑,要么純白。
2. 二值化的作用
通過二值化,能更好地分析物體的形狀和輪廓。
3. 二值化的實(shí)現(xiàn)
二值化的實(shí)現(xiàn)一般有: 全局閾值法、自適應(yīng)閾值法、OTSU二值化等
(1)全局閾值法
就是選定一個全局閾值,大于這個值的色素點(diǎn)就賦值為255;反之為0。
(2)自適應(yīng)閾值法
全局閾值法相對比較簡單粗暴。自適應(yīng)閾值法的原理就是將像素點(diǎn)與該點(diǎn)所在區(qū)域的像素的平均值做比較,大于則賦予255;反之,為0.
(3)OTSU二值化
不太明白,后續(xù)遇到后再進(jìn)行補(bǔ)充。
4.代碼實(shí)現(xiàn)
# --------------------------- # @Time : 2022/5/2 22:37 # @Author : lcq # @File : two_.py # @Function : 圖像二值化 # --------------------------- import cv2 import matplotlib.pyplot as plt import matplotlib import numpy as np matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 顯示中文 # 為了坐標(biāo)軸負(fù)號正常顯示。matplotlib默認(rèn)不支持中文,設(shè)置中文字體后,負(fù)號會顯示異常。需要手動將坐標(biāo)軸負(fù)號設(shè)為False才能正常顯示負(fù)號。 matplotlib.rcParams['axes.unicode_minus'] = False # 讀取灰度圖像 img = cv2.imread("C:\\Users\\17631\\Desktop\\test.jpeg", 0) print("原圖的shape: ", img.shape) plt.subplot(2, 2, 1) plt.imshow(img, cmap='gray') plt.title("原圖") # 1.全局閾值法 ret, mask_all = cv2.threshold(src=img, # 要二值化的圖片 thresh=127, # 全局閾值 maxval=255, # 大于全局閾值后設(shè)定的值 type=cv2.THRESH_BINARY) # 設(shè)定的二值化類型,THRESH_BINARY:表示小于閾值置0,大于閾值置填充色 print("全局閾值的shape: ", mask_all.shape) plt.subplot(2, 2, 2) plt.imshow(mask_all, cmap='gray') plt.title("全局閾值") # 2.自適應(yīng)閾值法 mask_local = cv2.adaptiveThreshold(src=img, # 要進(jìn)行處理的圖片 maxValue=255, # 大于閾值后設(shè)定的值 adaptiveMethod=cv2.ADAPTIVE_THRESH_MEAN_C, # 自適應(yīng)方法,ADAPTIVE_THRESH_MEAN_C:表區(qū)域內(nèi)均值;ADAPTIVE_THRESH_GAUSSIAN_C:表區(qū)域內(nèi)像素點(diǎn)加權(quán)求和 thresholdType=cv2.THRESH_BINARY, # 同全局閾值法中的參數(shù)一樣 blockSize=11, # 方陣(區(qū)域)大小, C=1) # 常數(shù)項,每個區(qū)域計算出的閾值的基礎(chǔ)上在減去這個常數(shù)作為這個區(qū)域的最終閾值,可以為負(fù)數(shù) print("局部閾值的shape: ", mask_local.shape) plt.subplot(2, 2, 3) plt.imshow(mask_local, cmap='gray') plt.title("局部閾值") # 3.OTSU二值化 ret2, mask_OTSU = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) print("OTSU的shape: ", mask_OTSU.shape) plt.subplot(2, 2, 4) plt.imshow(mask_OTSU, cmap='gray') plt.title("OTSU") plt.show()
效果:
打印的維度:
原圖的shape: (2338, 1080)
全局閾值的shape: (2338, 1080)
局部閾值的shape: (2338, 1080)
OTSU的shape: (2338, 1080)
注:
本文的代碼實(shí)現(xiàn)有參考這一篇文章,這篇文章寫得非常好,各位可查看:添加鏈接描述
到此這篇關(guān)于Python實(shí)現(xiàn)圖片二值化的文章就介紹到這了,更多相關(guān)Python圖片二值化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue之父子組件間通信實(shí)例講解(props、$ref、$emit)
組件間如何通信,也就成為了vue中重點(diǎn)知識了。這篇文章將會通過props、$ref和 $emit 這幾個知識點(diǎn),來講解如何實(shí)現(xiàn)父子組件間通信。2018-05-05Vue基于Element-ui實(shí)現(xiàn)表格彈窗組件
這篇文章主要為大家詳細(xì)介紹了Vue基于Element-ui實(shí)現(xiàn)表格彈窗組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04Vue自定義v-has指令實(shí)現(xiàn)按鈕權(quán)限判斷
這篇文章主要給大家介紹了關(guān)于Vue自定義v-has指令實(shí)現(xiàn)按鈕權(quán)限判斷的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04移動端Vue2.x Picker的全局調(diào)用實(shí)現(xiàn)
這篇文章主要介紹了移動端Vue2.x Picker的全局調(diào)用實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03vue uniapp 防止按鈕多次點(diǎn)擊的三種實(shí)現(xiàn)方式
最近的項目完成后,在性能優(yōu)化階段需要做按鈕的防止重復(fù)點(diǎn)擊功能,本文主要介紹了vue uniapp 防止按鈕多次點(diǎn)擊的三種實(shí)現(xiàn)方式,具有一定的參考價值,感興趣的可以了解一下2023-08-08vue render函數(shù)動態(tài)加載img的src路徑操作
這篇文章主要介紹了vue render函數(shù)動態(tài)加載img的src路徑操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10詳解vue結(jié)合el-table實(shí)現(xiàn)表格小計總計需求(summary-method)
這篇文章主要介紹了vue結(jié)合el-table實(shí)現(xiàn)表格小計總計需求(summary-method),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01