這篇博客將介紹如何使用python,opencv進行二維直方圖的計算及繪制(分別用opencv和numpy計算),二維直方圖可以讓我們對不同的像素密度有更好的了解。
1. 效果圖
原始圖如下:
1維直方圖如下:
2維直方圖如下:
x軸顯示s值,y軸顯示色調。
hsvmap效果圖如下:
2. 源碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
# opencv中的二維直方圖:使用相同的函數cv2.calchist()計算。 # 對于1d直方圖,我們從bgr轉換為灰度 # 對于2d直方圖,需要將圖像從bgr轉換為hsv import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread( 'ym.jpg' ) gray = cv2.cvtcolor(img,cv2.color_bgr2gray) hsv = cv2.cvtcolor(img, cv2.color_bgr2hsv) # 1維直方圖 hist = cv2.calchist([gray], [ 0 ], none, [ 256 ], [ 0 , 256 ]) hist, bins = np.histogram(img.ravel(), 256 , [ 0 , 256 ]) plt.hist(img.ravel(), 256 , [ 0 , 256 ]) plt.show() # 二維直方圖可以讓我們對不同的像素密度有了更好的了解 # opencv計算2d直方圖 # hsv圖像 [0,1]表示h、s通道,[180,256]表示h、s的bins分別為180、256 # [0,180,0,256]表示值的范圍 hist = cv2.calchist([hsv], [ 0 , 1 ], none, [ 180 , 256 ], [ 0 , 180 , 0 , 256 ]) hist = np.clip(hist * 0.005 , 0 , 1 ) cv2.imshow( 'hist' , hist) cv2.waitkey( 0 ) plt.imshow(hist, interpolation = 'nearest' ) plt.show() # numpy計算1d直方圖:np.histogram(); # numpy計算2d直方圖:np.historogram2d() h, s, v = cv2.split(hsv) hist, xbins, ybins = np.histogram2d(h.ravel(), s.ravel(), [ 180 , 256 ], [[ 0 , 180 ], [ 0 , 256 ]]) plt.imshow(hist, interpolation = 'nearest' ) plt.show() |
參考
https://github.com/seminar2012/opencv/blob/master/samples/python/color_histogram.py
到此這篇關于opencv實現二維直方圖的計算及繪制的文章就介紹到這了,更多相關opencv 二維直方圖 內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/qq_40985985/article/details/118862088