【问题标题】:OpenCV Python CalcHist : how to stack number of pixels in RGB values range?OpenCV Python CalcHist:如何在 RGB 值范围内堆叠像素数?
【发布时间】:2019-12-27 14:49:30
【问题描述】:

感谢每个 RGB 通道的 OpenCV calcHist 函数,我正在尝试获取图片的 RGB 直方图。目前,我已经成功获得了一个直方图,显示了从 0 到 256 的每个色调值(在三个颜色通道中的每一个上)有多少像素在我的图像中。但我想获得的是在许多颜色值范围内的像素。例如:

我的图像上有多少像素从红色通道的 0 到 50,然后从 51 到 100,等等?直到 256,在绿色和蓝色通道中也是如此。

我已经阅读了一些关于 OpenCV 和 calcHist 函数的文档和主题,但我不明白 Python 中的范围和 Bins 是如何工作的。

我特别读过这个:https://docs.opencv.org/2.4/modules/imgproc/doc/histograms.html?highlight=calchist#calchist

还有这个:OpenCV - Confusion using calcHist

(在这个以前的来源上,它们从 RGB 传递到 HSV,我不需要)

这是我用来获取 RGB 通道上每个色调值从 0 到 256 的像素数的代码。

import cv2
import matplotlib.pyplot as plt

name = "imagePath"
img = cv2.imread(name)

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

for i, col in enumerate(color):
    histr = cv2.calcHist([img],[i],None,[256],[0,256])
    plt.plot(histr,color = col)
    plt.xlim([0,256])

plt.show()

我得到这个直方图。这对我来说似乎是正确的:

https://zupimages.net/up/19/34/c3qf.png

当我尝试这段代码时:

import cv2
import matplotlib.pyplot as plt

name = "imagePath"
img = cv2.imread(name)

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

for i, col in enumerate(color):
    histr = cv2.calcHist([img],[i],None,[256],[0,9])
    plt.plot(histr,color = col)
    plt.xlim([0,256])

plt.show()

我得到这个直方图:

https://zupimages.net/up/19/34/2tty.png

这似乎不正确。与第一个直方图相比,我应该在 150 到 200 之间的红色曲线和 200 到 255 之间的绿色曲线上有像素点。

我做错了什么?我对 calcHist 函数中的范围和 bin 有什么不了解的地方?

谢谢,

【问题讨论】:

  • 您要求 [0 9] 上的范围,因此输出值在该范围内。从第一个直方图来看,这里似乎只有蓝色。注意:您 绘制 [0 256] 上的 9 个值,但您仍然有 9 个值。您对 [0 9] 范围有何期望?
  • 我希望有 10 个间隔,每个间隔有 25 个值。 [0,24],[25,49]...[225,249]。我真的不知道该怎么做。对不起,如果这是一个愚蠢的问题。

标签: python opencv range histogram


【解决方案1】:

您要求 [0 9] 上的范围,因此输出值在该范围内。从第一个直方图来看,这里似乎只有蓝色。您在 [0 256] 上绘制了 9 个值,但仍然有 9 个值。

要拥有 10 个范围,每个范围有 25 个值,您可以尝试:

for i, col in enumerate(color):
    histr = cv2.calcHist([img],[i],None,[10],[0,256])
    plt.plot(histr,color = col)
    plt.xlim([0,10])

plt.show()

【讨论】:

  • 非常感谢。好像没问题。一开始,我以为它只取 histogram 的第一个值,然后我写了: plt.xlim([0,10]) 以使 histogram 更具可读性。一切似乎都很好!再次感谢您!
  • 这确实更好,我相应地更新帖子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 2012-02-14
  • 1970-01-01
  • 2018-08-31
相关资源
最近更新 更多