中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Python中增強圖像對比度

發布時間:2021-05-21 17:12:35 來源:億速云 閱讀:622 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關怎么在Python中增強圖像對比度,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

圖像處理工具——灰度直方圖

灰度直方圖時圖像灰度級的函數,用來描述每個灰度級在圖像矩陣中的像素個數或者占有率。
例子:矩陣

怎么在Python中增強圖像對比度

圖片來自網絡,侵刪!

怎么在Python中增強圖像對比度

上面圖片的灰度直方圖

怎么在Python中增強圖像對比度

python實現

#!usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:Sui yue
@describe: 灰度直方圖,描述每個灰度級在圖像矩陣中的像素個數或者占有率
@time: 2019/09/15
"""

import sys
import cv2
import numpy as np
import matplotlib.pyplot as plt

#對于8位圖,圖像的灰度級范圍式0~255之間的整數,通過定義函數來計算直方圖
def calcGrayHist(image):
 #灰度圖像矩陣的高、寬
 rows, cols = image.shape
 #存儲灰度直方圖
 grayHist=np.zeros([256],np.uint64)
 for r in range(rows):
  for c in range(cols):
   grayHist[image[r][c]] +=1
 return grayHist
#主函數
if __name__=="__main__":
 #第一個參數式圖片地址,你只需放上你的圖片就可
 image = cv2.imread('../images/test3.jpg', cv2.IMREAD_GRAYSCALE)
 cv2.imshow("image", image)
 print("Usge:python histogram.py imageFile")
 #計算灰度直方圖
 grayHist=calcGrayHist(image)
 #畫出灰度直方圖
 x_range=range(256)
 plt.plot(x_range,grayHist,'r',linewidth=2,c='black')
 #設置坐標軸的范圍
 y_maxValue=np.max(grayHist)
 plt.axis([0,255,0,y_maxValue])
 plt.ylabel('gray level')
 plt.ylabel("number or pixels")
 # 顯示灰度直方圖
 plt.show()
 cv2.waitKeyEx(0)

結果

怎么在Python中增強圖像對比度

線性變換

假設輸入圖像為I,寬W、高為H,輸出圖像為O,圖像的線性變換可以利用以下公式:

怎么在Python中增強圖像對比度

a的改變影響圖像的對比度,b的改變影響圖像的亮度

線性變換python實現

#!usr/bin/env python3
#-*- coding:utf-8 -*-
#--------------------------
"""
@author:Sui yue
@describe: 對比增強,線性變換
@time: 2019/09/15 14:21:44
"""
import sys
import numpy as np
import cv2
import matplotlib.pyplot as plt
#主函數

def calcGrayHist(image):
 #灰度圖像矩陣的高、寬
 rows, cols = image.shape
 #存儲灰度直方圖
 grayHist=np.zeros([256],np.uint64)
 for r in range(rows):
  for c in range(cols):
   grayHist[image[r][c]] +=1
   # 顯示灰度直方圖
 # 畫出灰度直方圖
 x_range = range(256)
 plt.plot(x_range, grayHist, 'r', linewidth=2, c='black')
 # 設置坐標軸的范圍
 y_maxValue = np.max(grayHist)
 plt.axis([0, 255, 0, y_maxValue])
 plt.ylabel('gray level')
 plt.ylabel("number or pixels")
 # 顯示灰度直方圖
 plt.show()

if __name__=="__main__":
 # 讀圖像
 I = cv2.imread('../images/test3.jpg', cv2.IMREAD_GRAYSCALE)
 #線性變換
 a=3
 O=float(a)*I
 #進行數據截斷,大于255 的值要截斷為255
 O[0>255]=255
 #數據類型轉換
 O=np.round(O)
 #uint8類型
 O=O.astype(np.uint8)
 #顯示原圖和線性變換后的效果
 cv2.imshow("I",I)
 cv2.imshow("O",O)
 calcGrayHist(I)
 calcGrayHist(O)
 cv2.waitKey(0)
 cv2.destroyAllWindows()

線性變換結果

怎么在Python中增強圖像對比度

灰度直方圖

怎么在Python中增強圖像對比度

直方圖正規化

假設輸入圖像為I,寬W、高為HIr,c)I(r,c)I(r,c)代表I的第r行第c列的灰度值,將I中出現的最小灰度級記為IminI_{min}Imin,最大灰度級記為ImaxI_{max}Imax,Ir,c[Imin,Imax]I(r,c)\in [I_{min},I_{max}]I(r,c)∈[Imin,Imax],為使輸出圖像O的灰度級范圍為[Omin,Omax][O_{min},O_{max}][Omin,Omax],Ir,c)I(r,c)I(r,c)和Or,c)O(r,c)O(r,c)做以下映射關系:

怎么在Python中增強圖像對比度

其中0r<H,0c<W\quad0\le r \lt H,0\le c \lt W0≤r<H,0≤c<W,O(r,c)O(r,c)O(r,c)代表O的第r行和第c列的灰度值。這個過程就是常稱的直方圖正規化。因為0I(r,c)?IminImax?Imin10 \le\frac{I(r,c)-I_{min}}{I_{max}-I_{min}} \le 10≤Imax?IminI(r,c)?Imin≤1,所以O(r,c)[Omin,Omax]O(r,c) \in [O_{min},O_{max}]O(r,c)∈[Omin,Omax],一般令Omin=0O_{min}=0Omin=0,Omax=255O_{max}=255Omax=255。顯然,直方圖正規化使一種自動選取a和b的值的線性變換方法,其中

怎么在Python中增強圖像對比度

直方圖正規化python實現

#!usr/bin/env python3
#-*- coding:utf-8 -*-
#--------------------------
"""
@author:Sui yue
@describe: 直方圖正規化
@time: 2019/09/18 21:17:22
"""

import cv2
import numpy as np
import matplotlib.pyplot as plt
import sys

def calcGrayHist(image):
 #灰度圖像矩陣的高、寬
 rows, cols = image.shape
 #存儲灰度直方圖
 grayHist=np.zeros([256],np.uint64)
 for r in range(rows):
  for c in range(cols):
   grayHist[image[r][c]] +=1
   # 顯示灰度直方圖
 # 畫出灰度直方圖
 x_range = range(256)
 plt.plot(x_range, grayHist, 'r', linewidth=2, c='black')
 # 設置坐標軸的范圍
 y_maxValue = np.max(grayHist)
 plt.axis([0, 255, 0, y_maxValue])
 plt.ylabel('gray level')
 plt.ylabel("number or pixels")
 # 顯示灰度直方圖
 plt.show()
#主函數
if __name__ == '__main__':
 #讀入圖像
 I = cv2.imread('../images/test3.jpg', cv2.IMREAD_GRAYSCALE)
 #求I的最大值,最小值
 Imax=np.max(I)
 Imin=np.min(I)
 #要輸出的最小灰度級和最大灰度級
 Omax,Omin=255,0
 #計算a和b的值 ,測試出*4 能看到人臉
 a=float(Omax-Omin)/(Imax-Imin)
 b=Omin-a*Imin
 #矩陣的線性變換
 O=a*I+b
 #數據類型轉換
 O=O.astype(np.uint8)
 #顯示原圖和直方圖正規化的效果
 cv2.imshow("I",I)
 cv2.imshow("O",O)
 calcGrayHist(O)
 cv2.waitKey(0)
 cv2.destroyAllWindows()

直方圖正規化結果

怎么在Python中增強圖像對比度

怎么在Python中增強圖像對比度

伽馬變換

假設輸入圖像為I,寬W、高為H,首先將其灰度值歸一化到[0,1][0,1][0,1]范圍,對于8位圖來說,除以255即可。I(r,c)I(r,c)I(r,c)代表歸一化后的第r行第c列的灰度值,為使輸出圖像O ,伽馬變換就是令O(r,c)=I(r,c)γ,0r<H,0c<WO(r,c)=I(r,c)^\gamma,\quad0\le r \lt H,0\le c \lt WO(r,c)=I(r,c)γ,0≤r<H,0≤c<W,如下圖所示:

怎么在Python中增強圖像對比度

γ=1\gamma=1γ=1時,圖像不變。如果圖像整體或者感興趣區域較暗,則令0γ<10\le \gamma \lt 10≤γ<1可以增加圖像對比度;相反圖像整體或者感興趣區域較亮,則令γ>1\gamma \gt 1γ>1可以降低圖像對比度。

伽馬變換python實現

#!usr/bin/env python3
#-*- coding:utf-8 -*-
#--------------------------
"""
@author:Sui yue
@describe: 對比增強 伽馬變換
@time: 2019/09/18 22:22:51
"""
import cv2
import numpy as np
import sys
#主函數
if __name__ == '__main__':
  I = cv2.imread('../images/test3.jpg', cv2.IMREAD_GRAYSCALE)
  #圖像歸一化
  fI=I/255.0
  #伽馬變換
  gamma=0.3
  O=np.power(fI,gamma)
  #顯示原圖和伽馬變換
  cv2.imshow("I",I)
  cv2.imshow("O",O)
  cv2.waitKey()
  cv2.destroyAllWindows()

以上就是怎么在Python中增強圖像對比度,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鄂温| 浪卡子县| 香格里拉县| 无棣县| 东山县| 大城县| 二手房| 桃源县| 崇明县| 城固县| 鄢陵县| 桑日县| 承德市| 罗定市| 黔西| 绥芬河市| 化州市| 土默特右旗| 凭祥市| 迭部县| 曲沃县| 敦化市| 丹江口市| 台北县| 吴忠市| 定兴县| 二手房| 景宁| 报价| 汶川县| 高安市| 乌兰察布市| 农安县| 清镇市| 五大连池市| 鄂托克前旗| 盖州市| 徐闻县| 吴堡县| 宿松县| 宜宾市|