python - 如何从直方图中计算每个通道的平均值?
问题描述
我想从直方图中找到每个通道(R,G,B)的平均值。我正在使用的直方图来自图片的裁剪区域。我正在使用 Python 和 openCV,但我愿意使用不同的库。
所以首先我加载图像,然后裁剪感兴趣的区域。然后我对每个通道(BGR)使用 calcHist。这是蓝色通道的直方图。因此,由此得出的平均值应该在 140 左右。但是当将 histrB.mean() 用于蓝色通道时,我得到 17。我发现 mean() 正在执行以下操作: sum(histB)/len(np.count_nonzero (历史))。每个 hist 都是一个长度为 256 的向量,并且有很多零,就像图中所示。到目前为止,这是我的代码:
image='image.jpg'
img= cv.imread(image)
areaofinterest = img[145:193, 430:455]
histB = cv.calcHist([areaofinterest],[0],None,[256],[0,256])
histG = cv.calcHist([areaofinterest],[1],None,[256],[0,256])
histR = cv.calcHist([areaofinterest],[2],None,[256],[0,256])
我还想从每个通道中找到最大值并使用 max(histG) ,它实际上返回了向量中的最大值。
先感谢您
解决方案
直方图显示图像中值的分布。
histrB.mean()
计算向量 histrB 的平均值,它是所有向量元素的总和除以元素的数量。这将是直方图中每个 bin 的平均值数。
如果您想计算蓝色通道的平均值,您可以从图像本身计算它,或者如果您想从直方图计算它,您必须将每个值箱乘以该箱中的元素数并将这些值相加然后将该总和除以像素数
最大值和最小值相同。该直方图的最大值将为您提供所有 bin 中最高的像素数。
相反,您正在寻找具有 > 0 个元素的最高 bin。或具有 > 0 个元素的最低 bin 用于最小蓝色值。
确保您了解直方图是什么!
推荐阅读
- jmeter - JMeter - 如何使用 BeanShell 检查是否有任何失败的断言
- c++ - 如何在 QGIS C++ API 中使用 QT 信号和槽
- python-3.x - 异步关闭连接使连接处于 TIME_WAIT 状态
- python - 如何在不使用内置地图或星图的情况下编写类似星图的函数?
- .net - Tizen Net 挡板旋转事件未触发
- rest - 使用 Moq 的 Rest API 单元测试
- javascript - 发布请求未从 Angular 到达节点
- java - Android Webview 不会在 webview 中加载我的 FPDF 链接
- c++ - C++ for 循环继续循环,即使它不应该
- python - 自动拍摄 TradingView 图表的快照并保存在 Google Docs 中