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

Python 圖像對(duì)比度增強(qiáng)的幾種方法(小結(jié))

 更新時(shí)間:2019年09月25日 11:52:17   作者:錢小昊  
這篇文章主要介紹了Python 圖像對(duì)比度增強(qiáng)的幾種方法(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

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

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


圖片來自網(wǎng)絡(luò),侵刪!

來自網(wǎng)絡(luò)

上面圖片的灰度直方圖

在這里插入圖片描述

python實(shí)現(xiàn)

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

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

#對(duì)于8位圖,圖像的灰度級(jí)范圍式0~255之間的整數(shù),通過定義函數(shù)來計(jì)算直方圖
def calcGrayHist(image):
 #灰度圖像矩陣的高、寬
 rows, cols = image.shape
 #存儲(chǔ)灰度直方圖
 grayHist=np.zeros([256],np.uint64)
 for r in range(rows):
  for c in range(cols):
   grayHist[image[r][c]] +=1
 return grayHist
#主函數(shù)
if __name__=="__main__":
 #第一個(gè)參數(shù)式圖片地址,你只需放上你的圖片就可
 image = cv2.imread('../images/test3.jpg', cv2.IMREAD_GRAYSCALE)
 cv2.imshow("image", image)
 print("Usge:python histogram.py imageFile")
 #計(jì)算灰度直方圖
 grayHist=calcGrayHist(image)
 #畫出灰度直方圖
 x_range=range(256)
 plt.plot(x_range,grayHist,'r',linewidth=2,c='black')
 #設(shè)置坐標(biāo)軸的范圍
 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)

結(jié)果

在這里插入圖片描述

線性變換

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

a的改變影響圖像的對(duì)比度,b的改變影響圖像的亮度

線性變換python實(shí)現(xiàn)

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

def calcGrayHist(image):
 #灰度圖像矩陣的高、寬
 rows, cols = image.shape
 #存儲(chǔ)灰度直方圖
 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')
 # 設(shè)置坐標(biāo)軸的范圍
 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
 #進(jìn)行數(shù)據(jù)截?cái)啵笥?55 的值要截?cái)酁?55
 O[0>255]=255
 #數(shù)據(jù)類型轉(zhuǎn)換
 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()

線性變換結(jié)果

在這里插入圖片描述

灰度直方圖

在這里插入圖片描述

直方圖正規(guī)化

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


其中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列的灰度值。這個(gè)過程就是常稱的直方圖正規(guī)化。因?yàn)?math>0I(r,c)IminImaxImin10 \le\frac{I(r,c)-I_{min}}{I_{max}-I_{min}} \le 10≤Imax​−Imin​I(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。顯然,直方圖正規(guī)化使一種自動(dòng)選取a和b的值的線性變換方法,其中

直方圖正規(guī)化python實(shí)現(xiàn)

#!usr/bin/env python3
#-*- coding:utf-8 -*-
#--------------------------
"""
@author:Sui yue
@describe: 直方圖正規(guī)化
@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
 #存儲(chǔ)灰度直方圖
 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')
 # 設(shè)置坐標(biāo)軸的范圍
 y_maxValue = np.max(grayHist)
 plt.axis([0, 255, 0, y_maxValue])
 plt.ylabel('gray level')
 plt.ylabel("number or pixels")
 # 顯示灰度直方圖
 plt.show()
#主函數(shù)
if __name__ == '__main__':
 #讀入圖像
 I = cv2.imread('../images/test3.jpg', cv2.IMREAD_GRAYSCALE)
 #求I的最大值,最小值
 Imax=np.max(I)
 Imin=np.min(I)
 #要輸出的最小灰度級(jí)和最大灰度級(jí)
 Omax,Omin=255,0
 #計(jì)算a和b的值 ,測試出*4 能看到人臉
 a=float(Omax-Omin)/(Imax-Imin)
 b=Omin-a*Imin
 #矩陣的線性變換
 O=a*I+b
 #數(shù)據(jù)類型轉(zhuǎn)換
 O=O.astype(np.uint8)
 #顯示原圖和直方圖正規(guī)化的效果
 cv2.imshow("I",I)
 cv2.imshow("O",O)
 calcGrayHist(O)
 cv2.waitKey(0)
 cv2.destroyAllWindows()

直方圖正規(guī)化結(jié)果

在這里插入圖片描述

在這里插入圖片描述

伽馬變換

假設(shè)輸入圖像為I,寬W、高為H,首先將其灰度值歸一化到[0,1][0,1][0,1]范圍,對(duì)于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,如下圖所示:

來自網(wǎng)絡(luò)

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

伽馬變換python實(shí)現(xiàn)

#!usr/bin/env python3
#-*- coding:utf-8 -*-
#--------------------------
"""
@author:Sui yue
@describe: 對(duì)比增強(qiáng) 伽馬變換
@time: 2019/09/18 22:22:51
"""
import cv2
import numpy as np
import sys
#主函數(shù)
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()

伽馬變換結(jié)果

gamma=0.3

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python讀取Excel一列并計(jì)算所有對(duì)象出現(xiàn)次數(shù)的方法

    Python讀取Excel一列并計(jì)算所有對(duì)象出現(xiàn)次數(shù)的方法

    這篇文章主要給大家介紹了關(guān)于Python讀取Excel一列并計(jì)算所有對(duì)象出現(xiàn)次數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Python中的異常處理詳解

    Python中的異常處理詳解

    這篇文章主要介紹了Python中的異常處理詳解,在編寫Python程序時(shí),經(jīng)常會(huì)遇到各種運(yùn)行時(shí)錯(cuò)誤,這些錯(cuò)誤會(huì)導(dǎo)致程序終止并拋出異常。然而,有時(shí)我們希望程序能優(yōu)雅地處理這些錯(cuò)誤,而不是直接崩潰,這就需要用到異常處理了,需要的朋友可以參考下
    2023-07-07
  • Python實(shí)現(xiàn)PDF轉(zhuǎn)為Excel的示例講解

    Python實(shí)現(xiàn)PDF轉(zhuǎn)為Excel的示例講解

    這篇文章主要為大家詳細(xì)介紹了在Python中將PDF表格轉(zhuǎn)換為Excel文件的解決方案,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • Python嵌入C/C++進(jìn)行開發(fā)詳解

    Python嵌入C/C++進(jìn)行開發(fā)詳解

    在本篇文章里小編給大家分享了關(guān)于Python嵌入C/C++進(jìn)行開發(fā)的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們可以參考下。
    2020-06-06
  • Python plt 利用subplot 實(shí)現(xiàn)在一張畫布同時(shí)畫多張圖

    Python plt 利用subplot 實(shí)現(xiàn)在一張畫布同時(shí)畫多張圖

    這篇文章主要介紹了Python plt 利用subplot 實(shí)現(xiàn)在一張畫布同時(shí)畫多張圖,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Cpython編譯后再使用Pyinstaller打包的詳細(xì)教程

    Cpython編譯后再使用Pyinstaller打包的詳細(xì)教程

    pyinstaller是一個(gè)第三方庫,它能夠在Windows、Linux、 Mac OS X 等操作系統(tǒng)下將 Python 源文件打包,通過對(duì)源文件打包,這篇文章主要介紹了Cpython編譯后再使用Pyinstaller打包的詳細(xì)教程,需要的朋友可以參考下
    2023-11-11
  • 使用python進(jìn)行文件處理的庫存管理

    使用python進(jìn)行文件處理的庫存管理

    庫存管理是任何處理實(shí)物商品的企業(yè)的一個(gè)重要方面,Python?提供了各種庫來讀取和寫入文件,使其成為管理庫存的絕佳選擇,它允許我們使用?Python?等編程語言來操作計(jì)算機(jī)文件系統(tǒng)上的文件,在本文中,我們將探討如何使用文件處理在?Tkinter?中實(shí)現(xiàn)庫存管理系統(tǒng)
    2023-09-09
  • 使用PyCharm官方中文語言包漢化PyCharm

    使用PyCharm官方中文語言包漢化PyCharm

    這篇文章主要介紹了使用PyCharm官方中文語言包漢化PyCharm,需要的朋友可以參考下
    2020-11-11
  • Python判斷素?cái)?shù)的3種方法及for-else語句的用法介紹

    Python判斷素?cái)?shù)的3種方法及for-else語句的用法介紹

    素?cái)?shù)又叫質(zhì)數(shù),指的是>1的整數(shù)中,只能被1和這個(gè)數(shù)本身整除的數(shù),這篇文章主要給大家介紹了關(guān)于Python判斷素?cái)?shù)的3種方法及for-else語句的用法介紹的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • Python?matplotlib之折線圖的各種樣式與畫法總結(jié)

    Python?matplotlib之折線圖的各種樣式與畫法總結(jié)

    matplotlib是Python中的一個(gè)第三方庫,主要用于開發(fā)2D圖表,以漸進(jìn)式、交互式的方式實(shí)現(xiàn)數(shù)據(jù)可視化,可以更直觀的呈現(xiàn)數(shù)據(jù),使數(shù)據(jù)更具說服力,下面這篇文章主要給大家介紹了關(guān)于Python?matplotlib之折線圖的各種樣式與畫法的相關(guān)資料,需要的朋友可以參考下
    2022-12-12

最新評(píng)論