opencv python 2D直方圖的示例代碼
Histograms - 3 : 2D Histograms
我們已經(jīng)計算并繪制了一維直方圖,因為我們只考慮一個特征,即像素的灰度強度值.但在二維直方圖中,需要考慮兩個特征,通常,它用于查找顏色直方圖,其中兩個要素是每個像素的色調(diào)和飽和度值.
OpenCV中的2D直方圖
使用函數(shù)cv.calcHist(), 對于顏色直方圖,我們需要將圖像從BGR轉(zhuǎn)換為HSV。 (請記住,對于1D直方圖,我們從BGR轉(zhuǎn)換為灰度)。對于2D直方圖,其參數(shù)將修改如下:
- channels = [0,1]:因為我們需要同時處理H(色調(diào)Hue)和S(飽和度Saturation).
- bins = [180,256]:180對應(yīng)H,256對應(yīng)S.
- range = [0,180,0,256]:色調(diào)值介于0到180之間,飽和度介于0到256之間.
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('img.jpg')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
hist = cv2.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])
Numpy中的2D直方圖
np.histogram2d(). (注意,對于1D直方圖,我們使用np.histogram())
第一個參數(shù)是H平面,第二個是S平面,第三個是每個bins的數(shù)量,第四個是它們的范圍
繪制2D直方圖
方法 - 1:使用cv.imshow()
我們得到的結(jié)果是一個大小為180x256的二維數(shù)組. 因此我們可以像使用cv.imshow()函數(shù)一樣正常顯示它們. 它將是一個灰度圖像,它不會告訴你什么顏色,除非你知道不同顏色的色調(diào).
方法-2:使用Matplotlib
我們可以使用matplotlib.pyplot.imshow()函數(shù)繪制具有不同顏色圖的2D直方圖. 它讓我們更好地了解不同的像素密度, 但是,除非你知道不同顏色的色調(diào)值,否則這也不會讓我們知道第一眼看到的是什么顏色. 它簡單而且更好.
代碼:
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('img6.png')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
hist = cv2.calcHist([hsv], [0,1], None, [180,256], [0,180,0,256])
plt.imshow(hist, interpolation='nearest')
plt.show()


在直方圖中,你可以看到H=100和S=200附近的一些高值,它對應(yīng)于天空的藍(lán)色.同樣,在H=25和S=100附近也可以看到另一個峰值,它對應(yīng)著宮殿的黃色.
方法-3:OpenCV樣本風(fēng)格
在Opencv-Python2樣本中有一個用于顏色直方圖的示例代碼(samples/python/color_histogram.py).如果您運行代碼,您可以看到直方圖顯示相應(yīng)的顏色,或者簡單地輸出一個顏色編碼的直方圖.它的結(jié)果非常好(盡管您需要添加一些額外的行).
在這段代碼中,作者在HSV中創(chuàng)建了一個彩色地圖,然后將其轉(zhuǎn)換為BGR,生成的直方圖圖像與此顏色圖相乘,他還使用一些預(yù)處理步驟來移除小的孤立像素,從而形成一個良好的直方圖.

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python基于pygame實現(xiàn)的font游戲字體(附源碼)
這篇文章主要介紹了Python基于pygame實現(xiàn)的font游戲字體,涉及Python響應(yīng)鍵盤按鍵動態(tài)操作圖片元素的相關(guān)技巧,需要的朋友可以參考下2015-11-11
Python數(shù)學(xué)建模StatsModels統(tǒng)計回歸可視化示例詳解
圖形總是比數(shù)據(jù)更加醒目、直觀。解決統(tǒng)計回歸問題,無論在分析問題的過程中,還是在結(jié)果的呈現(xiàn)和發(fā)表時,都需要可視化工具的幫助和支持2021-10-10
Python標(biāo)準(zhǔn)庫學(xué)習(xí)之operator.itemgetter函數(shù)的使用
operator.itemgetter是Python標(biāo)準(zhǔn)庫operator模塊中的一個函數(shù),本文主要介紹了Python標(biāo)準(zhǔn)庫學(xué)習(xí)之operator.itemgetter函數(shù)的使用,具有一定的參考價值,感興趣的可以了解一下2024-07-07
Python?Matplotlib中使用plt.savefig存儲圖片的方法舉例
pytorch下保存圖像有很多種方法,但是這些基本上都是基于圖像處理的,將圖像的像素指定一定的維度,下面這篇文章主要給大家介紹了關(guān)于Python?Matplotlib中使用plt.savefig存儲圖片的相關(guān)資料,需要的朋友可以參考下2023-02-02
Python matplotlib繪圖建立畫布及坐標(biāo)系
這篇文章主要介紹了Python matplotlib繪圖建立畫布及坐標(biāo)系,建立畫布 figsize,它用width和height來控制畫布的寬和高,下面來一起倆姐更多內(nèi)容吧2021-12-12
Python程序設(shè)計入門(3)數(shù)組的使用
這篇文章主要介紹了Python數(shù)組的使用方法,需要的朋友可以參考下2014-06-06
PyTorch 1.0 正式版已經(jīng)發(fā)布了
今天小編就為大家分享一篇關(guān)于PyTorch 1.0 正式版已經(jīng)發(fā)布了!小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12

