最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python圖像運算之圖像灰度直方圖對比詳解

 更新時間:2022年08月12日 10:30:49   作者:Eastmount  
本篇文章將結(jié)合直方圖分別對比圖像灰度變換前后的變化,方便大家更清晰地理解灰度變換和閾值變換,文中的示例代碼講解詳細,需要的可以參考一下

一.灰度增強直方圖對比

圖像灰度上移變換使用的表達式為:

DB=DA+50

該算法將實現(xiàn)圖像灰度值的上移,從而提升圖像的亮度,結(jié)合直方圖對比的實現(xiàn)代碼如下所示。

# -*- coding: utf-8 -*-
# By:Eastmount
import cv2  
import numpy as np
import matplotlib.pyplot as plt

#讀取圖像
img = cv2.imread('lena-hd.png')

#圖像灰度轉(zhuǎn)換
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#獲取圖像高度和寬度
height = grayImage.shape[0]
width = grayImage.shape[1]
result = np.zeros((height, width), np.uint8)

#圖像灰度上移變換 DB=DA+50
for i in range(height):
    for j in range(width):
        if (int(grayImage[i,j]+50) > 255):
            gray = 255
        else:
            gray = int(grayImage[i,j]+50)
        result[i,j] = np.uint8(gray)

#計算原圖的直方圖
hist = cv2.calcHist([img], [0], None, [256], [0,255])

#計算灰度變換的直方圖
hist_res = cv2.calcHist([result], [0], None, [256], [0,255])

#原始圖像
plt.figure(figsize=(8, 6))
plt.subplot(221), plt.imshow(img, 'gray'), plt.title("(a)"), plt.axis('off')

#繪制掩膜
plt.subplot(222), plt.plot(hist), plt.title("(b)"), plt.xlabel("x"), plt.ylabel("y")

#繪制掩膜設(shè)置后的圖像
plt.subplot(223), plt.imshow(result, 'gray'), plt.title("(c)"), plt.axis('off')

#繪制直方圖
plt.subplot(224), plt.plot(hist_res), plt.title("(d)"), plt.xlabel("x"), plt.ylabel("y")
plt.show()

其運行結(jié)果如圖1所示,其中(a)表示原始圖像,(b)表示對應(yīng)的灰度直方圖,(c)表示灰度上移后的圖像,(d)是對應(yīng)的直方圖。對比發(fā)現(xiàn),圖1(d)比圖1(b)的灰度級整體高了50,曲線整體向右平移了50個單位。

二.灰度減弱直方圖對比

該算法將減弱圖像的對比度,使用的表達式為:

DB=DA×0.8

Python結(jié)合直方圖實現(xiàn)灰度對比度減弱的代碼如下所示。

# -*- coding: utf-8 -*-
# By:Eastmount
import cv2  
import numpy as np
import matplotlib.pyplot as plt

#讀取圖像
img = cv2.imread('lena-hd.png')

#圖像灰度轉(zhuǎn)換
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#獲取圖像高度和寬度
height = grayImage.shape[0]
width = grayImage.shape[1]
result = np.zeros((height, width), np.uint8)

#圖像對比度減弱變換 DB=DA×0.8
for i in range(height):
    for j in range(width):
        gray = int(grayImage[i,j]*0.8)
        result[i,j] = np.uint8(gray)

#計算原圖的直方圖
hist = cv2.calcHist([img], [0], None, [256], [0,255])

#計算灰度變換的直方圖
hist_res = cv2.calcHist([result], [0], None, [256], [0,255])

#原始圖像
plt.figure(figsize=(8, 6))
plt.subplot(221), plt.imshow(img, 'gray'), plt.title("(a)"), plt.axis('off')

#繪制掩膜
plt.subplot(222), plt.plot(hist), plt.title("(b)"), plt.xlabel("x"), plt.ylabel("y")

#繪制掩膜設(shè)置后的圖像
plt.subplot(223), plt.imshow(result, 'gray'), plt.title("(c)"), plt.axis('off')

#繪制直方圖
plt.subplot(224), plt.plot(hist_res), plt.title("(d)"), plt.xlabel("x"), plt.ylabel("y")
plt.show()

其運行結(jié)果如圖2所示,其中(a)和(b)表示原始圖像和對應(yīng)的灰度直方圖,(c)和(d)表示灰度減弱或?qū)Ρ榷瓤s小的圖像及對應(yīng)的直方圖。圖2(d)比圖2(b)的灰度級整體縮小了0.8倍,繪制的曲線更加密集。

三.圖像反色直方圖對比

該算法將圖像的顏色反色,對原圖像的像素值進行反轉(zhuǎn),即黑色變?yōu)榘咨?,白色變?yōu)楹谏褂玫谋磉_式為:

DB=255-DA

實現(xiàn)代碼如下所示。

# -*- coding: utf-8 -*-
# By:Eastmount
import cv2  
import numpy as np
import matplotlib.pyplot as plt

#讀取圖像
img = cv2.imread('lena-hd.png')

#圖像灰度轉(zhuǎn)換
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#獲取圖像高度和寬度
height = grayImage.shape[0]
width = grayImage.shape[1]
result = np.zeros((height, width), np.uint8)

#圖像灰度反色變換 DB=255-DA
for i in range(height):
    for j in range(width):
        gray = 255 - grayImage[i,j]
        result[i,j] = np.uint8(gray)

#計算原圖的直方圖
hist = cv2.calcHist([img], [0], None, [256], [0,255])

#計算灰度變換的直方圖
hist_res = cv2.calcHist([result], [0], None, [256], [0,255])

#原始圖像
plt.figure(figsize=(8, 6))
plt.subplot(221), plt.imshow(img, 'gray'), plt.title("(a)"), plt.axis('off')

#繪制掩膜
plt.subplot(222), plt.plot(hist), plt.title("(b)"), plt.xlabel("x"), plt.ylabel("y")

#繪制掩膜設(shè)置后的圖像
plt.subplot(223), plt.imshow(result, 'gray'), plt.title("(c)"), plt.axis('off')

#繪制直方圖
plt.subplot(224), plt.plot(hist_res), plt.title("(d)"), plt.xlabel("x"), plt.ylabel("y")
plt.show()

其運行結(jié)果如圖3所示,其中(a)和(b)表示原始圖像和對應(yīng)的灰度直方圖,(c)和(d)表示灰度反色變換圖像及對應(yīng)的直方圖。圖3(d)與圖3(b)是反相對稱的,整個灰度值滿足DB=255-DA表達式。

四.圖像對數(shù)變換直方圖對比

該算法將增加低灰度區(qū)域的對比度,從而增強暗部的細節(jié),使用的表達式為:

下面代碼實現(xiàn)了圖像灰度的對數(shù)變換及直方圖對比。

# -*- coding: utf-8 -*-
# By:Eastmount
import cv2  
import numpy as np
import matplotlib.pyplot as plt

#讀取圖像
img = cv2.imread('lena-hd.png')

#圖像灰度轉(zhuǎn)換
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#獲取圖像高度和寬度
height = grayImage.shape[0]
width = grayImage.shape[1]
result = np.zeros((height, width), np.uint8)

#圖像灰度對數(shù)變換
for i in range(height):
    for j in range(width):
        gray = 42 * np.log(1.0 + grayImage[i,j])
        result[i,j] = np.uint8(gray)

#計算原圖的直方圖
hist = cv2.calcHist([img], [0], None, [256], [0,255])

#計算灰度變換的直方圖
hist_res = cv2.calcHist([result], [0], None, [256], [0,255])

#原始圖像
plt.figure(figsize=(8, 6))
plt.subplot(221), plt.imshow(img, 'gray'), plt.title("(a)"), plt.axis('off')

#繪制原始圖像直方圖
plt.subplot(222), plt.plot(hist), plt.title("(b)"), plt.xlabel("x"), plt.ylabel("y")

#灰度變換后的圖像
plt.subplot(223), plt.imshow(result, 'gray'), plt.title("(c)"), plt.axis('off')

#灰度變換圖像的直方圖
plt.subplot(224), plt.plot(hist_res), plt.title("(d)"), plt.xlabel("x"), plt.ylabel("y")
plt.show()

其運行結(jié)果如圖4所示,其中(a)和(b)表示原始圖像和對應(yīng)的灰度直方圖,(c)和(d)表示灰度對數(shù)變換圖像及對應(yīng)的直方圖。

五.圖像閾值化處理直方圖對比

該算法原型為threshold(Gray,127,255,cv2.THRESH_BINARY),當(dāng)前像素點的灰度值大于thresh閾值時(如127),其像素點的灰度值設(shè)定為最大值(如9位灰度值最大為255);否則,像素點的灰度值設(shè)置為0。二進制閾值化處理及直方圖對比的Python代碼如下所示。

# -*- coding: utf-8 -*-
# By:Eastmount
import cv2  
import numpy as np
import matplotlib.pyplot as plt

#讀取圖像
img = cv2.imread('lena-hd.png')

#圖像灰度轉(zhuǎn)換
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#二進制閾值化處理
r, result = cv2.threshold(grayImage, 127, 255, cv2.THRESH_BINARY)

#計算原圖的直方圖
hist = cv2.calcHist([img], [0], None, [256], [0,256])

#計算閾值化處理的直方圖
hist_res = cv2.calcHist([result], [0], None, [256], [0,256])

#原始圖像
plt.figure(figsize=(8, 6))
plt.subplot(221), plt.imshow(img, 'gray'), plt.title("(a)"), plt.axis('off')

#繪制原始圖像直方圖
plt.subplot(222), plt.plot(hist), plt.title("(b)"), plt.xlabel("x"), plt.ylabel("y")

#閾值化處理后的圖像
plt.subplot(223), plt.imshow(result, 'gray'), plt.title("(c)"), plt.axis('off')

#閾值化處理圖像的直方圖
plt.subplot(224), plt.plot(hist_res), plt.title("(d)"), plt.xlabel("x"), plt.ylabel("y")
plt.show()

其運行結(jié)果如圖5所示,其中(a)和(b)表示原始圖像和對應(yīng)的灰度直方圖,(c)和(d)表示圖像閾值化處理及對應(yīng)的直方圖,圖5(d)中可以看到,灰度值僅僅分布于0(黑色)和255(白色)兩種灰度級。

六.總結(jié)

本文主要講解圖像直方圖理論知識以及直方圖繪制方法,包括灰度增強直方圖對比、灰度減弱直方圖對比、圖像反色直方圖對比、圖像對數(shù)變換直方圖對比、圖像閾值化處理直方圖對比。灰度直方圖是灰度級的函數(shù),描述的是圖像中每種灰度級像素的個數(shù),反映圖像中每種灰度出現(xiàn)的頻率。這篇文章的知識點將為后續(xù)圖像處理和圖像運算對比提供支撐。

以上就是Python圖像運算之圖像灰度直方圖對比詳解的詳細內(nèi)容,更多關(guān)于Python灰度直方圖對比的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • NumPy 如何生成多維數(shù)組的方法

    NumPy 如何生成多維數(shù)組的方法

    這篇文章主要介紹了NumPy 如何生成多維數(shù)組的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • Python?UnicodedecodeError編碼問題解決方法匯總

    Python?UnicodedecodeError編碼問題解決方法匯總

    本文主要介紹了Python?UnicodedecodeError編碼問題解決方法匯總,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • keras的ImageDataGenerator和flow()的用法說明

    keras的ImageDataGenerator和flow()的用法說明

    這篇文章主要介紹了keras的ImageDataGenerator和flow()的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • python右對齊的實例方法

    python右對齊的實例方法

    在本篇文章里小編給大家整理的是關(guān)于python右對齊的實例方法,有需要的朋友們可以學(xué)習(xí)參考下。
    2020-07-07
  • 詳解小白之KMP算法及python實現(xiàn)

    詳解小白之KMP算法及python實現(xiàn)

    在看子串匹配問題的時候,書上的關(guān)于KMP的算法的介紹總是理解不了。看了一遍代碼總是很快的忘掉,后來決定好好分解一下KMP算法,算是給自己加深印象。感興趣的朋友跟隨小編一起看看吧
    2019-04-04
  • Python刪除n行后的其他行方法

    Python刪除n行后的其他行方法

    今天小編就為大家分享一篇Python刪除n行后的其他行方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Django REST framework 異常處理

    Django REST framework 異常處理

    本文將結(jié)合實例代碼,介紹Django REST framework 異常處理,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • Python巧用SnowNLP實現(xiàn)生成srt字幕文件

    Python巧用SnowNLP實現(xiàn)生成srt字幕文件

    SnowNLP是一個可以方便的處理中文文本內(nèi)容的python類庫,本文主要為大家詳細介紹了Python如何巧用SnowNLP實現(xiàn)將一段話一鍵生成srt字幕文件,感興趣的可以了解下
    2024-01-01
  • PyCharm 2019.3發(fā)布增加了新功能一覽

    PyCharm 2019.3發(fā)布增加了新功能一覽

    這篇文章主要介紹了PyCharm 2019.3發(fā)布,增加了新功能一覽,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • Python?logging日志模塊的概念與實踐講解

    Python?logging日志模塊的概念與實踐講解

    本文通過具體的代碼示例為大家解釋了如何高效地使用logging模塊進行日志記錄,以及如何避免常見的陷阱,希望可以幫助大家更好地掌握這個強大的工具
    2023-07-07

最新評論

即墨市| 青阳县| 五家渠市| 蕲春县| 长泰县| 怀来县| 施秉县| 临泉县| 合阳县| 仪陇县| 密云县| 宜宾市| 宣武区| 张北县| 崇仁县| 马龙县| 巴林右旗| 赞皇县| 海门市| 兰考县| 惠东县| 扎囊县| 兴隆县| 离岛区| 伊宁县| 仁寿县| 海丰县| 高淳县| 额尔古纳市| 迁西县| 亚东县| 周宁县| 灵丘县| 锦屏县| 泸州市| 喀喇沁旗| 特克斯县| 抚宁县| 屏南县| 保康县| 麟游县|