国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

Python OpenCV 直方圖的計(jì)算與顯示的方法示例

2020-02-22 23:10:16
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本篇文章介紹如何用OpenCV Python來(lái)計(jì)算直方圖,并簡(jiǎn)略介紹用NumPy和Matplotlib計(jì)算和繪制直方圖

直方圖的背景知識(shí)、用途什么的就直接略過(guò)去了。這里直接介紹方法。

計(jì)算并顯示直方圖

與C++中一樣,在Python中調(diào)用的OpenCV直方圖計(jì)算函數(shù)為cv2.calcHist。

cv2.calcHist的原型為:

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

通過(guò)一個(gè)例子來(lái)了解其中的各個(gè)參數(shù):

#coding=utf-8 import cv2 import numpy as np  image = cv2.imread("D:/histTest.jpg", 0) hist = cv2.calcHist([image],   [0], #使用的通道   None, #沒(méi)有使用mask   [256], #HistSize   [0.0,255.0]) #直方圖柱的范圍 

其中第一個(gè)參數(shù)必須用方括號(hào)括起來(lái)。

第二個(gè)參數(shù)是用于計(jì)算直方圖的通道,這里使用灰度圖計(jì)算直方圖,所以就直接使用第一個(gè)通道;

第三個(gè)參數(shù)是Mask,這里沒(méi)有使用,所以用None。

第四個(gè)參數(shù)是histSize,表示這個(gè)直方圖分成多少份(即多少個(gè)直方柱)。第二個(gè)例子將繪出直方圖,到時(shí)候會(huì)清楚一點(diǎn)。

第五個(gè)參數(shù)是表示直方圖中各個(gè)像素的值,[0.0, 256.0]表示直方圖能表示像素值從0.0到256的像素。

最后是兩個(gè)可選參數(shù),由于直方圖作為函數(shù)結(jié)果返回了,所以第六個(gè)hist就沒(méi)有意義了(待確定)

最后一個(gè)accumulate是一個(gè)布爾值,用來(lái)表示直方圖是否疊加。

彩色圖像不同通道的直方圖

下面來(lái)看下彩色圖像的直方圖處理。以最著名的lena.jpg為例,首先讀取并分離各通道:

import cv2   import numpy as np      img = cv2.imread("D:/lena.jpg")   b, g, r = cv2.split(img) 

接著計(jì)算每個(gè)通道的直方圖,這里將其封裝成一個(gè)函數(shù):

def calcAndDrawHist(image, color):    hist= cv2.calcHist([image], [0], None, [256], [0.0,255.0])    minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(hist)    histImg = np.zeros([256,256,3], np.uint8)    hpt = int(0.9* 256);        for h in range(256):      intensity = int(hist[h]*hpt/maxVal)      cv2.line(histImg,(h,256), (h,256-intensity), color)          return histImg;  

這里只是之前代碼的簡(jiǎn)單封裝,所以注釋就省掉了。

接著在主函數(shù)中使用:

if __name__ == '__main__':    img = cv2.imread("D:/lena.jpg")    b, g, r = cv2.split(img)      histImgB = calcAndDrawHist(b, [255, 0, 0])    histImgG = calcAndDrawHist(g, [0, 255, 0])    histImgR = calcAndDrawHist(r, [0, 0, 255])        cv2.imshow("histImgB", histImgB)    cv2.imshow("histImgG", histImgG)    cv2.imshow("histImgR", histImgR)    cv2.imshow("Img", img)    cv2.waitKey(0)    cv2.destroyAllWindows()  

這樣就能得到三個(gè)通道的直方圖了,如下:

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 农安县| 北流市| 塔城市| 达州市| 南丹县| 江都市| 渝中区| 北流市| 游戏| 青岛市| 阳泉市| 北宁市| 营口市| 静宁县| 九江县| 民乐县| 凤冈县| 三原县| 平度市| 通海县| 阳谷县| 平顺县| 连山| 张家港市| 汝阳县| 泸州市| 长治县| 温州市| 襄垣县| 霍州市| 应城市| 达州市| 莆田市| 孟州市| 盐城市| 鹿泉市| 青岛市| 定远县| 蒙山县| 大渡口区| 交城县|