欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python圖像處理之二值化處理

 更新時間:2024年05月06日 12:36:58   作者:牛右刀薛面  
所謂”二值化處理“就是將矩陣中每個點的RGB值(0,0,0)[黑色]或者(255,255,255)[白色],這篇文章主要介紹了Python圖像處理之二值化處理,需要的朋友可以參考下

1、什么是二值化處理

我們都知道,圖像是由矩陣構(gòu)成,矩陣中每個點的RGB值都不一樣,呈現(xiàn)出來的色彩不一樣,最終整體呈現(xiàn)給我們的就是一張彩色的圖像。所謂”二值化處理“就是將矩陣中每個點的RGB值(0,0,0)[黑色]或者(255,255,255)[白色]

2、為什么要進行二值化處理

早期人們使用計算機處理圖像是,實在圖像灰度化處理的基礎(chǔ)上在進行操作的,但是當時的硬件水平不足,所以處理速度很慢,于是人們引入了圖像二值化處理。二值化處理使得原本顏色的取值范圍從256種變?yōu)?種,確實是提高了計算速度,但是丟失的信息也多了,因此具體采用什么方式處理,要根據(jù)具體情況來選擇。

3、如何進行二值化處理

(1)簡單閾值

簡單閾值是選取一個全局閾值,然后把整幅圖像分成非黑即白的二值圖像,灰度值大于閾值就賦為255反之為0。

ret,mask = cv2.threshold(img2gray,175,255,cv2.THRESH_BINAR)

返回值一: 閾值,(Otsu‘s二值化會用到)
返回值二: 處理以后的圖像
參數(shù)一: 初始圖像
參數(shù)二:我們自己設(shè)定的閾值
參數(shù)三: 當圖像像素置超過我們的設(shè)定的閾值時賦為255
參數(shù)四 : 我們設(shè)定的二值化類型

閾值小于閾值大于閾值
THRESH_BINARY置0置填充色
THRESH_BINARY_INV置填充色0
THRESH_TRUNC保持原色置灰色
THRESH_TOZERO置0保持原色
THRESH_TOZERO_INV保持原色置0

注:cv2.threshold最后一個參數(shù)可以寫為0,1,2,3,4按順序?qū)?yīng)表格中的五種
代碼如下

import cv2
import matplotlib.pyplot as plt
img = cv2.imread('dog.jpeg', 0)  # 直接讀為灰度圖像
ret, thresh1 = cv2.threshold(img, 127, 255, 0)
ret, thresh2 = cv2.threshold(img, 127, 255, 1)
ret, thresh3 = cv2.threshold(img, 127, 255, 2)
ret, thresh4 = cv2.threshold(img, 127, 255, 3)
ret, thresh5 = cv2.threshold(img, 127, 255, 4)
titles = ['img', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]
for i in range(6):
    plt.subplot(2, 3, i + 1), plt.imshow(images[i],'gray')
    plt.title(titles[i])
    plt.xticks([]), plt.yticks([])
plt.show()

在這里插入圖片描述

注:將閾值大于127的像素值置為255

(2)自適應(yīng)閾值

簡單閾值的方式過于粗魯,自適應(yīng)閾值更趨向于局部性的閾值,也就是說,將像素點的像素值與該點所在的區(qū)域的像素值的平均值(最大值,中位數(shù)等)決定該店屬于0還是1

th2 = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_MEAN_C,0,11,2)

返回值: 處理后返回的圖像
參數(shù)一: 原始圖像
參數(shù)二:像素值上限
參數(shù)三:自適應(yīng)方法
— cv2.ADAPTIVE_THRESH_MEAN_C :領(lǐng)域內(nèi)均值
—cv2.ADAPTIVE_THRESH_GAUSSIAN_C :領(lǐng)域內(nèi)像素點加權(quán)和
參數(shù)四:賦值方式(參考簡單閾值中介紹的表格)
參數(shù)五:設(shè)定方陣的大?。ㄒ驗槭菍⒁粋€點與其周圍的方陣數(shù)據(jù)對比)
參數(shù)六:常數(shù),每個區(qū)域計算出的閾值的基礎(chǔ)上在減去這個常數(shù)作為這個區(qū)域的最終閾值,可以為負數(shù)

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('dog.jpeg',0)
img = cv.medianBlur(img,5)
ret,th1 = cv.threshold(img,127,255,cv.THRESH_BINARY)
th2 = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_MEAN_C,0,11,2)
th3 = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,0,11,2)
titles = ['Original Image', 'Global Thresholding (v = 127)',
            'Adaptive Mean Thresholding', 'Adaptive Gaussian Thresholding']
images = [img, th1, th2, th3]
for i in range(4):
    plt.subplot(2,2,i+1),plt.imshow(images[i],'gray')
    plt.title(titles[i])
    plt.xticks([]),plt.yticks([])
plt.show()

在這里插入圖片描述

(3)Otsu’s二值化

對于簡單閾值,cv2.threshold()的第二個參數(shù)是我們自己設(shè)定的閾值范圍,一張圖片的最好的閾值分界線不是憑感覺看出來的,而是有合理的方式能找到的,threshold的第一個返回值就是處理圖片的閾值分界線。因此,只要在threshold函數(shù)的最后一個參數(shù)在原有的基礎(chǔ)上加上’cv2.THRESH_OTSU‘那么第一個返回值就是最佳閾值。直接看代碼更好理解。
注:OTSU非常適合灰度直方圖具有雙峰值的情況

import cv2
import matplotlib.pyplot as plt
img = cv2.imread('cat.jpg', 0)  # 直接讀為灰度圖像
# 簡單濾波
ret1, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
print(ret1)
# Otsu 濾波
ret2, th2 = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
print(ret2)
plt.figure()
plt.subplot(221), plt.imshow(img,'gray')
plt.subplot(222), plt.hist(img.ravel(), 256)  # .ravel方法將矩陣轉(zhuǎn)化為一維
plt.subplot(223), plt.imshow(th1,'gray')
plt.subplot(224), plt.imshow(th2,'gray')
plt.show()

在這里插入圖片描述

4、參考文獻:

https://numpy.org/doc/stable/reference/generated/numpy.hstack.html
https://zhuanlan.zhihu.com/p/360824614
https://blog.csdn.net/jjddss/article/details/72841
https://blog.csdn.net/li_l_il/article/details/86767790
https://blog.csdn.net/JNingWei/article/details/77747959
https://blog.csdn.net/weixin_35732969/article/details/83779660

聲明:部分圖像源自網(wǎng)絡(luò),本文僅供學習交流使用,如果不妥,請聯(lián)系刪除。

到此這篇關(guān)于Python圖像處理之二值化處理的文章就介紹到這了,更多相關(guān)Python二值化處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python字典鍵值對的添加和遍歷方法

    python字典鍵值對的添加和遍歷方法

    下面小編就為大家?guī)硪黄猵ython字典鍵值對的添加和遍歷方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • python字符串中的單雙引

    python字符串中的單雙引

    下面小編就為大家?guī)硪黄猵ython字符串中的單雙引。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • selenium+python 對輸入框的輸入處理方法

    selenium+python 對輸入框的輸入處理方法

    今天小編就為大家分享一篇selenium+python 對輸入框的輸入處理方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • windows下python連接oracle數(shù)據(jù)庫

    windows下python連接oracle數(shù)據(jù)庫

    這篇文章主要為大家詳細介紹了windows下python連接oracle數(shù)據(jù)庫,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Python實現(xiàn)數(shù)據(jù)的序列化操作詳解

    Python實現(xiàn)數(shù)據(jù)的序列化操作詳解

    在日常開發(fā)中,對數(shù)據(jù)進行序列化和反序列化是常見的數(shù)據(jù)操作,Python提供了兩個模塊方便開發(fā)者實現(xiàn)數(shù)據(jù)的序列化操作,即?json?模塊和?pickle?模塊。本文就為大家詳細講解這兩個模塊的使用,需要的可以參考一下
    2022-07-07
  • python實現(xiàn)對一個完整url進行分割的方法

    python實現(xiàn)對一個完整url進行分割的方法

    這篇文章主要介紹了python實現(xiàn)對一個完整url進行分割的方法,涉及Python操作URL的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • Tensorflow分類器項目自定義數(shù)據(jù)讀入的實現(xiàn)

    Tensorflow分類器項目自定義數(shù)據(jù)讀入的實現(xiàn)

    這篇文章主要介紹了Tensorflow分類器項目自定義數(shù)據(jù)讀入的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • 通過Python實現(xiàn)Payload分離免殺過程詳解

    通過Python實現(xiàn)Payload分離免殺過程詳解

    這篇文章主要介紹了通過Python實現(xiàn)Payload分離免殺過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • python35種繪圖函數(shù)詳細總結(jié)

    python35種繪圖函數(shù)詳細總結(jié)

    Python有許多用于繪圖的函數(shù)和庫,比如Matplotlib,Plotly,Bokeh,Seaborn等,這只是一些常用的繪圖函數(shù)和庫,Python還有其他繪圖工具,如Pandas、ggplot等,選擇適合你需求的庫,可以根據(jù)你的數(shù)據(jù)類型、圖形需求和個人偏好來決定,本文給大家總結(jié)了python35種繪圖函數(shù)
    2023-08-08
  • python中如何使用分步式進程計算詳解

    python中如何使用分步式進程計算詳解

    抽了點時間體驗了一把python分布式進程,有點像分布式計算的意思,這篇文章主要給大家介紹了關(guān)于python中如何使用分步式進程計算的相關(guān)資料,需要的朋友可以參考下
    2019-03-03

最新評論