opencv中python如何統(tǒng)計(jì)及繪制直方圖-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)opencv中python如何統(tǒng)計(jì)及繪制直方圖的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到習(xí)水網(wǎng)站設(shè)計(jì)與習(xí)水網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋習(xí)水地區(qū)。

灰度直方圖概括了圖像的灰度級(jí)信息,簡(jiǎn)單的來(lái)說(shuō)就是每個(gè)灰度級(jí)圖像中的像素個(gè)數(shù)以及占有率,創(chuàng)建直方圖無(wú)外乎兩個(gè)步驟,統(tǒng)計(jì)直方圖數(shù)據(jù),再用繪圖庫(kù)繪制直方圖。

統(tǒng)計(jì)直方圖數(shù)據(jù)

首先要稍微理解一些與函數(shù)相關(guān)的術(shù)語(yǔ),方便理解其在python3庫(kù)中的應(yīng)用和處理

BINS: 在上面的直方圖當(dāng)中,如果像素值是0到255,則需要256個(gè)值來(lái)顯示直 方圖。但是,如果不需要知道每個(gè)像素值的像素?cái)?shù)目,只想知道兩個(gè)像素值之間的像素點(diǎn)數(shù)目怎么辦?例如,想知道像素值在0到15之間的像素點(diǎn)數(shù)目,然后是16到31。。。240到255。可以將256個(gè)值分成16份,每份計(jì)算綜合。每個(gè)分成的小組就是一個(gè)BIN(箱)。在opencv中使用histSize表示BINS。

DIMS: 數(shù)據(jù)的參數(shù)數(shù)目。當(dāng)前例子當(dāng)中,對(duì)收集到的數(shù)據(jù)只考慮灰度值,所以該值為1。

RANGE: 灰度值范圍,通常是[0,256],也就是灰度所有的取值范圍。

統(tǒng)計(jì)直方圖同樣有兩種方法,使用opencv統(tǒng)計(jì)直方圖,函數(shù)如下:

cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])

該函數(shù)的參數(shù)在了解以上術(shù)語(yǔ)加上自己百度后可以簡(jiǎn)單應(yīng)用

使用numpy統(tǒng)計(jì)函數(shù),主要應(yīng)用 numpy.histogram() 函數(shù)(還有 np.bincount() ,還未嘗試,讀者可以自己嘗試,大抵使用方法相同)

hist,bins = np.histogram(img.ravel(),256,[0,256])

opencv處理速度優(yōu)于numpy,同時(shí)對(duì)于學(xué)習(xí)opencv的同學(xué)來(lái)說(shuō),多運(yùn)用cv的處理方法無(wú)疑更利于學(xué)習(xí)。

繪制直方圖

繪制直方圖一般使用Matplotlib繪制 ,這里要提一下matplotlib的 matplotlib.pyplot.hist() 函數(shù),該函數(shù)可以直接統(tǒng)計(jì)繪制中方圖。統(tǒng)計(jì)函數(shù)為 calcHist()np.histogram()
這是處理的樣圖

opencv中python如何統(tǒng)計(jì)及繪制直方圖

下面是代碼實(shí)現(xiàn)

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('/home/yc/Pictures/cat.jpg',0)
plt.hist(img.ravel(),256,[0,256]);
plt.show()

效果

opencv中python如何統(tǒng)計(jì)及繪制直方圖

灰度直方圖

當(dāng)然,在顏色圖像檢索之類用法時(shí),我們需要的是BGR直方圖,原理類似,統(tǒng)計(jì)時(shí)使用 cv2.calcHist()

函數(shù)

import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('/home/yc/Pictures/cat.jpg',1)
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])
plt.show()

效果如下

opencv中python如何統(tǒng)計(jì)及繪制直方圖

BGR直方圖

此外,再介紹一種很原始的計(jì)算灰度直方圖的方法……感覺(jué)代碼注釋的很完整,相信讀者也可以看懂

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

def main():
  img=cv2.imread('/home/yc/Pictures/cat.jpg',0)
  #得到計(jì)算灰度直方圖的值
  xy=xygray(img)  

  #畫(huà)出灰度直方圖
  x_range=range(256)
  plt.plot(x_range,xy,"r",linewidth=2,c='black')
  #設(shè)置坐標(biāo)軸的范圍
  y_maxValue=np.max(xy)
  plt.axis([0,255,0,y_maxValue])
  #設(shè)置坐標(biāo)軸的標(biāo)簽
  plt.xlabel('gray Level')
  plt.ylabel("number of pixels")
  plt.show()

def xygray(img):
  #得到高和寬
  rows,cols=img.shape
  #存儲(chǔ)灰度直方圖
  xy=np.zeros([256],np.uint64)
  for r in range(rows):
    for c in range(cols):
      xy[img[r][c]] += 1
  #返回一維ndarry
  return xy

main()

效果如下

opencv中python如何統(tǒng)計(jì)及繪制直方圖

灰度直方圖

感謝各位的閱讀!關(guān)于“opencv中python如何統(tǒng)計(jì)及繪制直方圖”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

網(wǎng)站欄目:opencv中python如何統(tǒng)計(jì)及繪制直方圖-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://bm7419.com/article18/gjddp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、品牌網(wǎng)站制作、網(wǎng)站內(nèi)鏈、App開(kāi)發(fā)網(wǎng)站改版、微信公眾號(hào)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)