欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Opencv实现二维直方图的计算及绘制

程序员文章站 2022-03-13 11:52:47
目录这篇博客将介绍如何使用python,opencv进行二维直方图的计算及绘制(分别用opencv和numpy计算),二维直方图可以让我们对不同的像素密度有更好的了解。1. 效果图原始图如下:1维直方...

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

1. 效果图

原始图如下:

Opencv实现二维直方图的计算及绘制

1维直方图如下:

Opencv实现二维直方图的计算及绘制

2维直方图如下:

x轴显示s值,y轴显示色调。

Opencv实现二维直方图的计算及绘制

hsvmap效果图如下:

Opencv实现二维直方图的计算及绘制

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

参考

到此这篇关于opencv实现二维直方图的计算及绘制的文章就介绍到这了,更多相关opencv 二维直方图 内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!