gpt4 book ai didi

python - openCV python - calcHist 合并

转载 作者:太空宇宙 更新时间:2023-11-03 21:41:31 26 4
gpt4 key购买 nike

我有这段代码用于计算和绘制图像的直方图。

colors = ('b', 'g', 'r')

for i, col in enumerate(colors):
hist = cv2.calcHist([imgDEF], [i], None, [256], [1, 256])
plt.plot(hist, color=col)

plt.show()

此代码为每种 rgb 颜色生成 3 个直方图。我需要对每个直方图求和以获得包含所有 rgb 颜色的单个直方图,因为我需要计算直方图的均值和标准差。

所以任何人都可以帮助我:1 - 如何将三个直方图合并为一个;2 - 如何计算总直方图的平均值(或标准偏差)?

非常感谢!

最佳答案

要获得表示 RGB 图像所有三种颜色的直方图,您可以计算所有像素的强度直方图。为此,您只需将图像转换为灰度,然后计算直方图。例如,像这样:

import cv2
import numpy as np
import matplotlib.pyplot as plt

imgDEF = cv2.imread("YOUR_IMAGE.jpg")
imgGray = cv2.cvtColor(imgDEF, cv2.COLOR_BGR2GRAY)
ghist = cv2.calcHist([imgGray], [0], None, [256], [0,256])

print ("Mean = {:.1f}, standard deviation = {:.1f}, total = {:.0f}".format(
np.mean(ghist).item(),
np.std(ghist).item(),
np.sum(ghist).item()
))

plt.plot(ghist, color='m')
plt.show()

注意:预计total(直方图的总和)将等于图像中的像素数。


原始答案。

这只会对您的直方图进行平均。但该平均值的含义有些模糊,因为该平均值的总和可能甚至不等于像素总数(就像任何真实直方图的情况一样)。

import cv2
import matplotlib.pyplot as plt
import numpy as np

imgDEF = cv2.imread("YOUR_IMAGE.jpg")

colors = ('b', 'g', 'r')

hist = {}
for i, col in enumerate(colors):
hist[i] = cv2.calcHist([imgDEF], [i], None, [256], [1, 256])
#plt.plot(hist[i], color=col)

ahist = (hist[0] + hist[1] + hist[2]) / 3

mean = np.mean(ahist).item()
std = np.std(ahist).item()
print ("Mean = {:.1f}, standard deviation = {:.1f}".format(mean, std))

plt.plot(ahist, color='m')
plt.show()

关于python - openCV python - calcHist 合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50586226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com