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

詳解OpenCV中直方圖,掩膜和直方圖均衡化的實現(xiàn)

 更新時間:2022年11月17日 09:32:39   作者:泡泡怡  
這篇文章主要為大家詳細介紹了OpenCV中直方圖、掩膜、直方圖均衡化詳細介紹及代碼的實現(xiàn),文中的示例代碼講解詳細,需要的可以參考一下

一、圖像直方圖

1.1 定義

圖像直方圖是圖像的基本屬性之一,也是反映圖像像素數(shù)據(jù)分布的統(tǒng)計學(xué)特征,其橫坐標代表了圖像像素點在[0,255]范圍中,縱坐標代表圖像像素點出現(xiàn)的個數(shù)或百分比。如圖:

1.2 函數(shù):cv2.calcHist([img1],[channels],mask,histSize,ranges)

img:輸入圖像

channels:通道,如果輸入的是灰度圖,則此參數(shù)為[0],如果是彩色圖,傳入?yún)?shù)為[0]或[1]或[2]分別對應(yīng)BGR。

mask:掩膜統(tǒng)計整幅圖的直方圖就是None。如果畫某一部分直方圖,需要制作一個掩模圖像并使用。掩模大小和img一樣的np數(shù)組,需要的部分為255,不需要的部分為0.

histSize:直方圖bin的數(shù)目,[0,256]所以就是256。

ranges:像素范圍[0,256]顧頭不顧尾啦。

1.3 代碼實現(xiàn):

(1)準備工作加灰度圖顯示:

import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#顯示圖像
def cv_show(name,img):
    cv2.imshow(name,img)
    cv2.cv2.waitKey(0)
    cv2.destroyAllWindows()
#導(dǎo)入圖像
img1=cv2.imread("C:/Users/bwy/Desktop/lena.bmp",0)
hist=cv2.calcHist([img1],[0],None,[256],[0,256])
print(hist.shape)
plt.hist(img.ravel(),256)
plt.show()

結(jié)果如圖(灰度圖):

 (2)彩色圖三個不同的通道:

img=cv2.imread("C:/Users/bwy/Desktop/7.png")
cv_show('img',img)
color=('b','g','r')
for i,col in enumerate(color):
    histr=cv2.calcHist([img],[i],None,[256],[0,256])
    plt.plot(histr,color=col)
    plt.xlim([0,256])

結(jié)果如圖:

從上面兩個圖我們就可發(fā)現(xiàn)直方圖很不均勻,可以比喻成不是矮胖的,所以我們接下來進行圖像直方圖均衡化。但是,在此之前我們在學(xué)習(xí)一下掩膜。

二、掩膜(mask)

2.1掩模mask思想:

掩模的大小和原圖像大小一致。掩模中只有兩部分,0和255,掩模中白色部分覆蓋到的區(qū)域保留原圖,黑色部分覆蓋到的區(qū)域置為0。如果我們讀入彩圖,在構(gòu)建np數(shù)組時,需要舍棄第三個維度,即通道。保留前兩個維度img.shape[:2],掩模的size和原圖像相同。由于mask是一個數(shù)組,可以使用切片方法將保留的位置變成白色255。

2.2代碼:

img.shape[:2]#(420, 607)
#創(chuàng)建mast
mask=np.zeros(img.shape[:2],np.uint8)
mask[100:300,200:400]=255
cv_show('mask',mask)

結(jié)果如圖:

masked_img=cv2.bitwise_and(img1,img1,mask=mask)
cv_show('masked_img',masked_img)

結(jié)果如圖:

2.3掩膜過程對比

plt.subplot(221),plt.imshow(img1)
plt.subplot(222),plt.imshow(mask)
plt.subplot(223),plt.imshow(masked_img)
plt.subplot(224),plt.plot(hist_full),plt.plot(hist_mask)
plt.xlim([0,256])
plt.show()

結(jié)果如圖:

三、直方圖均衡化

通過改變圖像的直方圖,來改變圖像中各像素的灰度,用于增強局部的對比度而不影響整體的對比度。這種方法對于背景和前景都太亮或者太暗的圖像非常有用。

3.1對圖像整體進行均衡化

(1)進行均衡化后直方圖前后對比顯示:

img=cv2.imread("C:/Users/bwy/Desktop/lena.bmp",0)
plt.hist(img.ravel(),256)
plt.show()
equ=cv2.equalizeHist(img)
plt.hist(equ.ravel(),256)
plt.show()

結(jié)果對比圖:

(2)進行均衡化后圖像前后對比顯示:

img=cv2.imread("C:/Users/bwy/Desktop/lena.bmp",0)
equ=cv2.equalizeHist(img)
res=np.hstack((img,equ))
cv_show('res',res)

但是呢,這個方法也存在微瑕,那看一下如果我用下面這張圖你就會發(fā)現(xiàn)了:

我們會發(fā)現(xiàn)這個帥鍋的臉太亮了,我們觀察不到細節(jié)了,細節(jié)丟失了,所以這個問題我們?nèi)绾谓鉀Q呢?

3.2 自適應(yīng)均衡化

1、定義:

整幅圖像會被分成很多小塊,然后再對每一個小塊分別進行直方圖均衡化。缺點是:如果有噪聲的話,噪聲會被放大。為了避免這種情況的出現(xiàn)要使用對比度限制。

2、代碼:

img2=cv2.imread("C:/Users/bwy/Desktop/1.png",0)
img2.shape#(508, 672)
img3=cv2.resize(img2,(400,300))
equ1=cv2.equalizeHist(img3)
clahe=cv2.createCLAHE(clipLimit=2.0,tileGridSize=(8,8))
res_clahe=clahe.apply(img3)
res=np.hstack((img3,equ1,res_clahe))
cv_show('res',res)

結(jié)果如圖:

以上就是詳解OpenCV中直方圖,掩膜和直方圖均衡化的實現(xiàn)的詳細內(nèi)容,更多關(guān)于OpenCV直方圖 掩膜 直方圖均衡化的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • TensorFlow用expand_dim()來增加維度的方法

    TensorFlow用expand_dim()來增加維度的方法

    今天小編就為大家分享一篇TensorFlow用expand_dim()來增加維度的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • python鏈表類中獲取元素實例方法

    python鏈表類中獲取元素實例方法

    在本篇文章里小編給大家整理的是一篇關(guān)于python鏈表類中獲取元素實例方法,有興趣的朋友們可以學(xué)習(xí)下。
    2021-02-02
  • Python海龜繪圖(Turtle)應(yīng)用指南

    Python海龜繪圖(Turtle)應(yīng)用指南

    python2.6版本中后引入的一個簡單的繪圖工具,叫做海龜繪圖(Turtle?Graphics)。海龜繪圖(turtle庫)是python的內(nèi)部模塊,使用前導(dǎo)入即可。本文將展示三個通過海龜繪圖實現(xiàn)的小程序,快來跟隨小編一起學(xué)習(xí)吧
    2022-03-03
  • 一文詳解如何配置Pycharm進行遠程開發(fā)

    一文詳解如何配置Pycharm進行遠程開發(fā)

    在搞深度學(xué)習(xí)的時候,我們在本地開發(fā),但是需要在服務(wù)器去運行工程,所以需要使用Pycharm進行遠程配置,下面這篇文章主要給大家介紹了關(guān)于如何配置Pycharm進行遠程開發(fā)的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • Python基礎(chǔ)學(xué)習(xí)之反射機制詳解

    Python基礎(chǔ)學(xué)習(xí)之反射機制詳解

    在Python中,反射是指通過一組內(nèi)置的函數(shù)和語句,在運行時動態(tài)地訪問、檢查和修改對象的屬性、方法和類信息的機制。本文將通過簡單的示例和大家講講Python中的反射機制,希望對大家有所幫助
    2023-03-03
  • 在Python中使用swapCase()方法轉(zhuǎn)換大小寫的教程

    在Python中使用swapCase()方法轉(zhuǎn)換大小寫的教程

    這篇文章主要介紹了在Python中使用swapCase()方法轉(zhuǎn)換大小寫的教程,是Python入門中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • Python實現(xiàn)批量文件分類保存的示例代碼

    Python實現(xiàn)批量文件分類保存的示例代碼

    當(dāng)我們電腦里面的文本或者或者文件夾太多了,有時候想找到自己想要的文件,只能通過去搜索文件名,這樣還是很麻煩的。本文將通過Python語言實現(xiàn)文件批量分類保存,需要的可以參考一下
    2022-04-04
  • python?DataFrame的shift()方法的使用

    python?DataFrame的shift()方法的使用

    在python數(shù)據(jù)分析中,可以使用shift()方法對DataFrame對象的數(shù)據(jù)進行位置的前滯、后滯移動,本文主要介紹了python?DataFrame的shift()方法的使用,感興趣的可以了解一下
    2022-03-03
  • Python趣味挑戰(zhàn)之用pygame實現(xiàn)簡單的金幣旋轉(zhuǎn)效果

    Python趣味挑戰(zhàn)之用pygame實現(xiàn)簡單的金幣旋轉(zhuǎn)效果

    今天教大家怎么用pygame實現(xiàn)簡單的金幣旋轉(zhuǎn)效果,文中有非常詳細的代碼示例,對正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • python數(shù)據(jù)分析近年比特幣價格漲幅趨勢分布

    python數(shù)據(jù)分析近年比特幣價格漲幅趨勢分布

    這篇文章主要為大家介紹了python分析近年來比特幣價格漲幅趨勢的數(shù)據(jù)分布,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-11-11

最新評論