- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有这段代码用于计算和绘制图像的直方图。
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/
我有这样的事情: import numpy as np import cv2 as cv from matplotlib import pyplot as plt import numpy.polyn
我正在使用 calcHist 函数计算图像的颜色直方图。我正在开发一个简单的图像匹配应用程序,我正在尝试使用颜色直方图作为图像描述符来查找相似图像。 这是定义: void calcHist(const
尝试使用带掩码的 calcHist 时出现此错误:error: (-215) mask.size() == imsize && mask.channels() == 1 in function his
我正在努力学习equalization of histograms , 我当然知道有 histogram equalization in OpenCV .我是iterating over the Ma
我正在尝试使用 OpenCV 的 Emgu C# 包装器为图像的反向投影创建直方图。我有以下 OpenCV C++ 代码,我正在尝试将其转换为 Emgu C#: char* filename = (c
我有这段代码用于计算和绘制图像的直方图。 colors = ('b', 'g', 'r') for i, col in enumerate(colors): hist = cv2.calcHi
在尝试使用 cv2.calcHist() 时,我遇到了以下不明确的错误 >>> img array([ 1., 2., 3., 4., 5.]) >>> cv2.calcHist( [img]
我试图了解 cvCalcHist 之间的区别,openCV c 版本 和 calcHist 中计算图像直方图的方法>,openCV c++ version 中计算图像直方图的方法。 openCV c版
我试图从 OpenCV 中的彩色(3 channel )图像中获取直方图,但每次我都像这样执行 calcHist 直方图: //int histSize[3]; //float hranges[2];
我已经多次阅读 calcHist() 的文档,但我认为我对 OpenCV 的缺乏经验和生疏的编程技能完全使我无法理解它。 我正在计算 HSV 图像(Hue 或 channel [0])的一个 chan
我想做的是编写一个函数来计算灰度图像的直方图,其中转发的 Bins 数 (anzBin) 直方图范围被划分为。然后我运行图像像素以匹配它们将值分配给不同的 Bins,如果某个值适合,则将 Bin 的值
我正在尝试让一些 C++ 代码在我的 Android 设备上运行;但是,我遇到了 Mat 类型的一个小问题。我在用着。我尝试转换的代码如下(第二个函数调用第一个): static Mat histc_
我在“OpenCV 2 计算机视觉应用程序编程手册”一书第 4 章中运行一个示例。calcHist 返回的只有 2 个直方图是黑色的,并且遵循源代码。运行结果如下图。 ColorHistogram()
我正在使用上面的代码从灰度图像计算直方图;它工作正常。 cv::Mat imgSrc = cv::imread("Image.jpg", cv::IMREAD_UNCHANGED); cv::Mat
我正在尝试计算仅由一行组成的矩阵的直方图。我使用 OpenCV3.1 在 VS2015 中编写了这段代码: //Create matrix stromal pop cv::Mat stromalHis
我想计算图像的颜色直方图,但只考虑特定像素(我知道其二维坐标)。 是否可以使用 calcHist 指定仅应考虑这些具体像素(而不是整个 cv::Mat 和其中的所有像素)?如果没有,是否可以创建一个新
我是计算机视觉的新手,这是我的第一份作业。我正在尝试创建与文件夹中的每个图像相对应的 rgb 直方图。假设我在 test 文件夹(位于我当前的工作目录中)中有 10 张图片。我想为每个图像创建 10
我有计算 hsv 和 yuv 图像直方图的代码。由于我试图单独获取与亮度对应的值,因此我想要来自 hsv 图像的“v” channel 值和来自 yuv 图像的亮度(“y”) channel 值。这是
这里有很多关于 OpenCV 中的 calcHist 的问题,但我找不到我的问题的答案,并且已经多次阅读文档,所以希望有人可以通过以下代码发现我的问题: //the setup is that I'v
我正在尝试使用以下代码: cv::MatND hist; cv::Mat image = cv::imread("image.bmp"); float *range = new
我是一名优秀的程序员,十分优秀!