千家信息网

如何深入了解Python二维直方图

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇文章给大家分享的是有关如何深入了解Python二维直方图,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言只统计像素的灰度值这一特征
千家信息网最后更新 2026年11月01日如何深入了解Python二维直方图

本篇文章给大家分享的是有关如何深入了解Python二维直方图,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

前言

只统计像素的灰度值这一特征,可将其成为一维直方图。二维直方图可以统计像素的色相和饱和度,用于查找图像的颜色直方图。

一、OpenCV中的二维直方图

OpenCV仍然使用cv2.calcHist()函数来查找图像的颜色直方图,只是在指定参数时与之前有所区别。

cv2.calcHist()函数的基本格式如下:

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

image参数指定的原图像应从BGR色彩空间转换为HSV色彩空间, 实际参数需要用方括号括起来

channels参数设置为[0,1]时, 表示同时处理色相和饱和度

histSize参数设置BINS值为[180,256]时, 表示色相为180, 饱和度为256

ranges参数设置为[0,180,0,256]时, 表示色相的取值范围为[0,180], 饱和度的取值范围为[0,2565]

cv2.calcHist()函数返回的颜色直方图可以直接使用cv2.show()函数显示。

import cv2import numpy as npimport matplotlib.pyplot as pltimg = 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()                                     # 显示颜色直方图

cv2.calcHist()函数返回的颜色直方图是一个大小为180*256的二维数组,用cv2.imshow()函数显示时是一副灰度图像,不能直接显示出颜色的分布情况。

可以使用matplotlib.pyplot.imshow()函数绘制具有不同颜色的二维直方图。

二、Numpy中的二维直方图

Numpy的np.histogram2d()函数用于计算二维直方图,其基本格式如下:

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

hist为返回的直方图

xedges为返回的x的直方图的BINS边界值

yedges为返回的y的直方图的BINS边界值

x和y为原图对应通道转换成的一维数组

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

可以使用matplotlib.pyplot.imshow()函数绘制具有不同颜色的二维直方图。

三、直方图示例

1、使用Numpy函数计算直方图

import cv2import numpy as npimport matplotlib.pyplot as pltimg = 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])   #计算B通道直方图histg, e2 = np.histogram(img[1].ravel(), 256, [0, 255])   #计算G通道直方图histr, e3 = np.histogram(img[2].ravel(), 256, [0, 255])   #计算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)           #转换色彩空间为HSVh, s, v = cv2.split(img2)hist, x, y=np.histogram2d(h.ravel(), s.ravel(), [180, 256], [[0, 180], [0, 256]])        #计算颜色直方图plt.subplot(2, 2, 3)plt.title('2Dhist')                                 #设置子图窗口标题plt.imshow(hist, interpolation = 'nearest',cmap = 'gray')                                    #绘制颜色直方图plt.show()                                          #显示颜色直方图

2、使用OpenCV函数计算直方图

# 2.使用OpenCV函数计算直方图import cv2import numpy as npimport matplotlib.pyplot as pltimg = 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])   #计算B通道直方图histg = cv2.calcHist([img], [1], None, [256], [0,255])   #计算G通道直方图histr = cv2.calcHist([img], [2], None, [256], [0,255])   #计算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')                                 #设置子图窗口标题plt.imshow(hist,interpolation = 'nearest',cmap = 'gray')                                    #绘制颜色直方图plt.show()                                          #显示颜色直方图

以上就是如何深入了解Python二维直方图,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

直方图 颜色 函数 二维 通道 参数 饱和度 饱和 像素 图像 格式 空间 色彩 范围 不同 原图 数组 更多 标题 灰度 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 云南咖啡 上海喔噻互联网科技有限公司 广州淘业互联网络科技 哈尔滨大商圈互联网科技有限公司 科技赋能下的互联网金融 互联网科技巨头监管 互联网科技作文 上海致骋互联网科技 互联网金融和金融科技 山东吉时兔互联网科技有限公司 互联网科技公司实习生 和信科技工业互联网 健康食品互联网创新科技园项目 国大互联网教育科技有限公司薪资 上海同邻互联网科技有限公司规模 互联网科技手机排行榜 互联网科技和医药行业 众联互联网络科技 科技美学互联网 艺术 互联网科技快速发展优美句子 火传媒上海互联网科技 恒银科技与互联网金融 金融科技与互联网金融相同和不同 互联网金融中的现代科技 互联网软件和科技 中国科技创新与世界互联网大会 爱医互联网络科技 互联网科技平台产品运营 互联网界的黑科技 银川新华互联网科技学校原画
0