使用Python,Opencv进行二维直方图的计算及绘制

Posted 程序媛一枚~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Python,Opencv进行二维直方图的计算及绘制相关的知识,希望对你有一定的参考价值。

使用Python,Opencv进行二维直方图的计算及绘制

这篇博客将介绍如何使用Python,Opencv进行二维直方图的计算及绘制(分别用Opencv和Numpy计算),二维直方图可以让我们对不同的像素密度有更好的了解。

1. 效果图

原始图如下:
在这里插入图片描述
1维直方图如下:
在这里插入图片描述
2维直方图如下:
X轴显示S值,Y轴显示色调。
在这里插入图片描述
hsvmap效果图如下:
在这里插入图片描述

2. 源码

# 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()

参考

以上是关于使用Python,Opencv进行二维直方图的计算及绘制的主要内容,如果未能解决你的问题,请参考以下文章

opencv —— calcHistminMaxLoc 计算并绘制图像直方图寻找图像全局最大最小值

python:opencv比较直方图结果

OpenCV-Python直方图计算calcHist函数详解

直方图的反向投影的原理详解及OpenCV下的示例源码

使用OpenCV,Numpy计算直方图,Matplot绘制直方图及分析

OpenCV-Python图像直方图计算calcHist函数详解示例及图形呈现