python-opencv 图像处理基础 (四)1D直方图 2D直方图
定义一维直方图:只考虑了一个特性,即像素的灰度值。二维直方图:考虑两个特征,通常是色度和饱和度。代码opencv 二维直方图一维的直方图使用函数cv2.calcHist()进行计算,从BGR转换成灰度图。二位直方图使用相同的函数cv2.calcHist()进行计算。对于颜色直方图,需要将图像从RGB转换为HSV。对于2D直方图,其参数将被修改如下:通道=0,1,因为需要同时处理H和S平面。用于H平
定义
一维直方图:只考虑了一个特性,即像素的灰度值。
二维直方图:考虑两个特征,通常是色度和饱和度。
代码
opencv 二维直方图
一维的直方图使用函数cv2.calcHist()进行计算,从BGR转换成灰度图。
二位直方图使用相同的函数cv2.calcHist()进行计算。对于颜色直方图,需要将图像从RGB转换为HSV。对于2D直方图,其参数将被修改如下:
通道=0,1,因为需要同时处理H和S平面。
用于H平面的bin=180,以及256的S平面。
范围在[0,180,0,256]色值在0-180之间,饱和度在0-256之间。
X 轴显示S 值,Y 轴显示H 值。
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('home.jpg')
hsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)
hist = cv.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])
plt.imshow(hist,interpolation='nearest')
plt.show()
numpy二维直方图
Numpy还提供了一个特定的功能:np.histogram2d()。(记住,对于一维的直方图,我们使用了np.histogram()。
第一个参数是H平面,第二个是S平面,第三个是每个箱子的数量,第四个是它们的范围。
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('home.jpg')
hsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)
hist, xbins, ybins = np.histogram2d(h.ravel(),s.ravel(),[180,256],[[0,180],[0,256]])
绘制二位直方图
方法-1:使用cv.imshow()
我们得到的结果是一个大小为180x256的二维数组。所以我们可以像往常一样,使用cv.imshow()函数来显示它们。它将是一个灰度图像,它不会给出太多的颜色,除非你知道不同颜色的色调值。
方法-2:使用Matplotlib
我们可以使用matplotlib.pyplot.imshow()函数来绘制带有不同颜色映射的2D直方图。它给我们提供了一个更好的关于不同像素密度的概念。但这也不能让我们知道第一眼看到的是什么颜色,除非你知道不同颜色的色调值。我还是喜欢这种方法。这很简单,也很好。
请注意:在使用这个函数时,请记住,插值标记应该是最接近于更好结果的。
参考:
1、python-opencv Tutorials 一码人翻译(25)图像处理---- --直方图----2d直方图_一码人的博客-CSDN博客

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)