溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何深入了解Python二維直方圖

發(fā)布時間:2021-12-27 13:43:59 來源:億速云 閱讀:406 作者:柒染 欄目:開發(fā)技術(shù)

本篇文章給大家分享的是有關(guān)如何深入了解Python二維直方圖,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

前言

只統(tǒng)計(jì)像素的灰度值這一特征,可將其成為一維直方圖。二維直方圖可以統(tǒng)計(jì)像素的色相和飽和度,用于查找圖像的顏色直方圖。

一、OpenCV中的二維直方圖

OpenCV仍然使用cv2.calcHist()函數(shù)來查找圖像的顏色直方圖,只是在指定參數(shù)時與之前有所區(qū)別。

cv2.calcHist()函數(shù)的基本格式如下:

hist =cv2.calcHist(image, channels, mask, histSize, ranges)

image參數(shù)指定的原圖像應(yīng)從BGR色彩空間轉(zhuǎn)換為HSV色彩空間, 實(shí)際參數(shù)需要用方括號括起來

channels參數(shù)設(shè)置為[0,1]時, 表示同時處理色相和飽和度

histSize參數(shù)設(shè)置BINS值為[180,256]時, 表示色相為180, 飽和度為256

ranges參數(shù)設(shè)置為[0,180,0,256]時, 表示色相的取值范圍為[0,180], 飽和度的取值范圍為[0,2565]

cv2.calcHist()函數(shù)返回的顏色直方圖可以直接使用cv2.show()函數(shù)顯示。

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

img = cv2.imread('XIAN.jpg')
cv2.namedWindow('orininal', cv2.WINDOW_NORMAL)
cv2.imshow('orininal', img)

img2 = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
hist = cv2.calcHist([img2], [0, 1], None, [180, 256], [0,180,0,256])

cv2.namedWindow('2DHist', cv2.WINDOW_NORMAL)
cv2.imshow('2DHist', hist)

cv2.waitKey(0)
cv2.destroyAllWindows()

plt.imshow(hist, interpolation = 'nearest')    # 繪制顏色直方圖
plt.show()                                     # 顯示顏色直方圖

如何深入了解Python二維直方圖

cv2.calcHist()函數(shù)返回的顏色直方圖是一個大小為180*256的二維數(shù)組,用cv2.imshow()函數(shù)顯示時是一副灰度圖像,不能直接顯示出顏色的分布情況。

可以使用matplotlib.pyplot.imshow()函數(shù)繪制具有不同顏色的二維直方圖。

如何深入了解Python二維直方圖

二、Numpy中的二維直方圖

Numpy的np.histogram2d()函數(shù)用于計(jì)算二維直方圖,其基本格式如下:

hist, xedges, yedges = np.histogram2d(x, y, bins, range)

hist為返回的直方圖

xedges為返回的x的直方圖的BINS邊界值

yedges為返回的y的直方圖的BINS邊界值

xy為原圖對應(yīng)通道轉(zhuǎn)換成的一維數(shù)組

bins為BINS的值, 如[180,256]

range為像素范圍, 格式為[[0, 180],[0, 256]]

img = cv2.imread('building.jpg')
cv2.imshow('orininal', img)

img2 = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(img2)

hist, x, y = np.histogram2d(h.ravel(), s.ravel(), [180, 256], [[0, 180],[0, 256]])

cv2.imshow('2DHist', hist)

cv2.waitKey(0)
cv2.destroyAllWindows()

plt.imshow(hist, interpolation = 'nearest')
plt.show()

如何深入了解Python二維直方圖

可以使用matplotlib.pyplot.imshow()函數(shù)繪制具有不同顏色的二維直方圖。

如何深入了解Python二維直方圖

三、直方圖示例

1、使用Numpy函數(shù)計(jì)算直方圖

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

img = cv2.imread('home.jpg')

plt.figure(figsize = (25,25))
imgrgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)        
plt.subplot(2, 2, 1)                                  
plt.title('Original')
plt.axis('off')
plt.imshow(imgrgb)

histb, e1 = np.histogram(img[0].ravel(), 256, [0, 255])   #計(jì)算B通道直方圖
histg, e2 = np.histogram(img[1].ravel(), 256, [0, 255])   #計(jì)算G通道直方圖
histr, e3 = np.histogram(img[2].ravel(), 256, [0, 255])   #計(jì)算R通道直方圖
plt.subplot(2, 2, 2)
plt.plot(histb, color = 'b')              
plt.plot(histg, color = 'g')              
plt.plot(histr, color = 'r')              
plt.title('Hist')


img2 = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)           #轉(zhuǎn)換色彩空間為HSV
h, s, v = cv2.split(img2)
hist, x, y=np.histogram2d(h.ravel(), s.ravel(), [180, 256], [[0, 180], [0, 256]])        #計(jì)算顏色直方圖
plt.subplot(2, 2, 3)
plt.title('2Dhist')                                 #設(shè)置子圖窗口標(biāo)題
plt.imshow(hist, interpolation = 'nearest',cmap = 'gray')                                    #繪制顏色直方圖
plt.show()                                          #顯示顏色直方圖

如何深入了解Python二維直方圖

2、使用OpenCV函數(shù)計(jì)算直方圖

# 2.使用OpenCV函數(shù)計(jì)算直方圖
import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('flower.jpg')

plt.figure(figsize = (25,25))
imgrgb=cv2.cvtColor(img, cv2.COLOR_BGR2RGB)         
plt.subplot(2, 2, 1)                           
plt.imshow(imgrgb)
plt.title('Original')                         
plt.axis('off')

histb = cv2.calcHist([img], [0], None, [256], [0,255])   #計(jì)算B通道直方圖
histg = cv2.calcHist([img], [1], None, [256], [0,255])   #計(jì)算G通道直方圖
histr = cv2.calcHist([img], [2], None, [256], [0,255])   #計(jì)算R通道直方圖
plt.subplot(2, 2, 2)
plt.plot(histb, color= 'b') 
plt.plot(histg, color= 'g') 
plt.plot(histr, color= 'r')  
plt.title('Hist') 


img2=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
hist = cv2.calcHist([img2], [0, 1], None, [180, 256], [0, 180, 0, 256])   
plt.subplot(2, 2, 3)
plt.title('2Dhist')                                 #設(shè)置子圖窗口標(biāo)題
plt.imshow(hist,interpolation = 'nearest',cmap = 'gray')                                    #繪制顏色直方圖
plt.show()                                          #顯示顏色直方圖

如何深入了解Python二維直方圖

以上就是如何深入了解Python二維直方圖,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI