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

python 基于opencv實現(xiàn)圖像增強

 更新時間:2020年12月23日 11:14:37   作者:Superme  
這篇文章主要介紹了python 基于opencv實現(xiàn)圖像增強的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下

為了得到更加清晰的圖像我們需要通過技術(shù)對圖像進行處理,比如使用對比度增強的方法來處理圖像,對比度增強就是對圖像輸出的灰度級放大到指定的程度,獲得圖像質(zhì)量的提升。本文主要通過代碼的方式,通過OpenCV的內(nèi)置函數(shù)將圖像處理到我們理想的結(jié)果。

灰度直方圖

灰度直方圖通過描述灰度級在圖像矩陣中的像素個數(shù)來展示圖像灰度級的信息,通過灰度直方圖的統(tǒng)計我們可以看到每個灰度值的占有率。下面是一個灰度直方圖的實現(xiàn):

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

#計算灰度直方圖
def calcGrayHist(image):
  rows,clos = image.shape
  #創(chuàng)建一個矩陣用于存儲灰度值
  grahHist = np.zeros([256],np.uint64)
  print('這是初始化矩陣')
  print(grahHist )
  for r in range(rows):
    for c in range(clos):
      #通過圖像矩陣的遍歷來將灰度值信息放入我們定義的矩陣中
      grahHist[image[r][c]] +=1
  print('這是賦值后的矩陣')
  print(grahHist)
  return grahHist
if __name__=="__main__":
  image = cv2.imread("../img/aa.jpg",cv2.IMREAD_GRAYSCALE)
  grahHist = calcGrayHist(image)
  x_range = range(256)
  plt.plot(x_range,grahHist,'-',linewidth= 3,c='k')
  #設置坐標軸的范圍
  y_maxValue = np.max(grahHist)
  plt.axis([0,255,0,y_maxValue])
  #設置標簽
  plt.xlabel('gray Level')
  plt.ylabel("number of pixels")
  #顯示灰度直方圖
  plt.show()

運行結(jié)果

線性變換

線性變換的公式為:

圖像的線性變換無疑就是利用矩陣的乘法就行線性變換,比如一個矩陣I ,2I,3I (np.unt8 ndarry類型就是unt8類型)就是一個矩陣的變換.

import cv2
import numpy as np
import sys

if __name__=="__main__":
  img = cv2.imread("../img/ae.jpg",cv2.IMREAD_GRAYSCALE)
  a=2
  #線性變換 定義float類型
  O = float(a)*img
  #數(shù)據(jù)截取 如果大于255 取 255
  O[0>255] = 255
  #數(shù)據(jù)類型的轉(zhuǎn)換
  O = np.round(O)
  O = O.astype(np.uint8)
  cv2.imshow("img",img)
  cv2.imshow('enhance',O)
  cv2.waitKey(0)
  cv2.destroyAllWindows()

運行結(jié)果:

灰度級范圍越大就代表對比度越高,反之對比度越低視覺上清晰度就越低。我們通過a=2的線性對比度拉伸將灰度級范圍擴大到[0,255]之間,如上圖我們改變灰度級的范圍后圖像變的清晰。

直方圖正規(guī)化

將圖像O中的最小灰度級記為OminOmin,最大灰度級記為OmaxOmax,假如輸出的圖像P的灰度級范圍為[Pmin,PmaxPmin,Pmax],則O 與 P的關(guān)系為:

其中P(r,c)就代表P的第r行第c列的灰度值。這個過程就是直方圖的正規(guī)化。我們一般令P的范圍是[0,255],所以直方圖的正規(guī)化是在求a,b變換的值的方法,我們可以得到:

下面我們使用OpenCV來實現(xiàn)上面的理論:

import cv2
import numpy as np
import sys
from enhance.GrayHist import mget
if __name__=="__main__":
  img = cv2.imread("../img/o3.jpg",cv2.IMREAD_GRAYSCALE)
  #求出img 的最大最小值
  Maximg = np.max(img)
  Minimg = np.min(img)
  print(Maximg, Minimg, '-----------')
  #輸出最小灰度級和最大灰度級
  Omin,Omax = 0,255
  #求 a, b
  a = float(Omax - Omin)/(Maximg - Minimg)
  b = Omin - a*Minimg
  print(a,b,'-----------')
  #線性變換
  O = a*img + b
  O = O.astype(np.uint8)
  #利用灰度直方圖進行比較 mget為GrayHist中的寫方法
  mget(img)
  mget(O)


  cv2.imshow('img',img)
  cv2.imshow('enhance',O)
  cv2.waitKey(0)
  cv2.destroyAllWindows()

伽瑪變換

將一張圖的灰度值歸至[0,1]后,對于8位圖來說,除以255即可。伽瑪變換就是令O(r,c)=I(r,c)γI(r,c)γ,0≤r<H,0≤≤r<H,0≤c<W.
當γγ等于1時圖像不發(fā)生變換,而當γγ大于0且小于1時就可以增強圖像的對比度,相反的當γγ大于1時就可以使圖像對比度降低。 以下是伽瑪變換在OpenCV中的實現(xiàn):

import cv2
import numpy as np
import sys

# 伽瑪變換 power函數(shù)實現(xiàn)冪函數(shù)

if __name__ == "__main__":
  img = cv2.imread("../img/ae.jpg", cv2.IMREAD_GRAYSCALE)
  # 歸1
  Cimg = img / 255
  # 伽瑪變換
  gamma = 0.5
  O = np.power(Cimg,gamma)
  #效果
  cv2.imshow('img',img)
  cv2.imshow('O',O)
  cv2.waitKey(0)
  cv2.destroyAllWindows()

運行結(jié)果:

直方圖的均衡化

  • 計算圖像的灰度直方圖
  • 計算灰度直方圖的累加直方圖
  • 根據(jù)累加的直方圖和直方圖均衡化的原理得到輸入灰度級與輸出灰度級之間的映射關(guān)系
  • 使用循環(huán)的方式得到輸出圖像的每一個像素的灰度級
import cv2
import numpy as np
from enhance.GrayHist import calcGrayHist

#直方圖的均衡化
if __name__ == "__main__":
  image = cv2.imread("../img/ae.jpg", cv2.IMREAD_GRAYSCALE)
  rows,cols = image.shape
  #計算灰度直方圖
  grayHist = calcGrayHist(image)
  #計算累加灰度直方圖
  zeroCumuMoment = np.zeros([256], np.uint32)
  for p in range(256):
    if p == 0:
      zeroCumuMoment[p] = grayHist[0]
    else:
      zeroCumuMoment[p] = zeroCumuMoment[p-1] + grayHist[p]
  #根據(jù)累加的灰度直方圖得到輸入與輸出灰度級之間的映射關(guān)系
  output = np.zeros([256],np.uint8)
  cofficient = 256.0/(rows*cols)
  for p in range(256):
    q = cofficient * float(zeroCumuMoment[p])-1
    if q >=0:
      output[p] = np.math.floor(q)
    else:
      output[p] = 0
  #得出均衡化圖像
  equalHistimg = np.zeros(image.shape,np.uint8)
  for r in range(rows):
    for c in range(cols):
      equalHistimg[r][c] = output[image[r][c]]
  cv2.imshow('image',image)
  cv2.imshow('histimage',equalHistimg)
  cv2.waitKey(0)
  cv2.destroyAllWindows()

運行結(jié)果:

以上就是python 基于opencv實現(xiàn)圖像增強的詳細內(nèi)容,更多關(guān)于python opencv的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python并發(fā)和異步編程實例

    python并發(fā)和異步編程實例

    這篇文章主要為大家詳細介紹了python并發(fā)和異步編程實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Python sublime安裝及配置過程詳解

    Python sublime安裝及配置過程詳解

    這篇文章主要介紹了Python sublime安裝及配置過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Python數(shù)據(jù)庫安裝及MySQL?Connector應用教程

    Python數(shù)據(jù)庫安裝及MySQL?Connector應用教程

    這篇文章主要為大家介紹了Python數(shù)據(jù)庫安裝及MySQL Connector應用教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Python環(huán)境下安裝PyGame和PyOpenGL的方法

    Python環(huán)境下安裝PyGame和PyOpenGL的方法

    這篇文章主要介紹了Python環(huán)境下安裝PyGame和PyOpenGL的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • python中對二維列表中一維列表的調(diào)用方法

    python中對二維列表中一維列表的調(diào)用方法

    在本文里小編給大家整理的是關(guān)于python中對二維列表中一維列表的調(diào)用方法,正在學習的朋友們可以參考下。
    2020-06-06
  • Python Matplotlib繪制箱線圖的全過程

    Python Matplotlib繪制箱線圖的全過程

    又稱箱形圖(boxplot)或盒式圖,數(shù)據(jù)大小、占比、趨勢等等的呈現(xiàn)其包含一些統(tǒng)計學的均值、分位數(shù)、極值等等統(tǒng)計量,因此該圖信息量較大,下面這篇文章主要給大家介紹了關(guān)于Python Matplotlib繪制箱線圖的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Python使用正則實現(xiàn)計算字符串算式

    Python使用正則實現(xiàn)計算字符串算式

    這篇文章主要介紹了Python使用正則實現(xiàn)計算字符串算式的方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • Python并發(fā)編程多進程,多線程及GIL全局解釋器鎖

    Python并發(fā)編程多進程,多線程及GIL全局解釋器鎖

    這篇文章主要介紹了Python并發(fā)編程多進程,多線程及GIL全局解釋器鎖,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • python獲取中文字符串長度的方法

    python獲取中文字符串長度的方法

    今天小編就為大家分享一篇python獲取中文字符串長度的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • python3 使用traceback定位異常實例

    python3 使用traceback定位異常實例

    這篇文章主要介紹了python3 使用traceback定位異常實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03

最新評論

龙游县| 陈巴尔虎旗| 东阳市| 盐津县| 三门县| 仙游县| 宣汉县| 新宁县| 郓城县| 太白县| 昭通市| 孟州市| 栾川县| 东明县| 张家口市| 鄯善县| 大港区| 那曲县| 江永县| 隆回县| 屏边| 安乡县| 海门市| 武胜县| 右玉县| 平邑县| 监利县| 金秀| 乌鲁木齐县| 额敏县| 铜山县| 浦县| 瑞安市| 永平县| 焦作市| 当雄县| 邮箱| 鄄城县| 华容县| 通江县| 改则县|