这篇博客将介绍如何使用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