opencvpython-CalcHist:如何堆叠RGB值范围内的像素数?

2024-04-18 19:11:26 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我的图像有多少像素在红色通道中从0到50,然后从51到100,依此类推?直到256年,还有绿色和蓝色通道。在

我读过一些关于OpenCV和calcHist函数的文档和主题,但是我不明白Python中的范围和容器是如何工作的。在

我特别读过这个: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

当我尝试这个代码时:

^{pr2}$

我得到这个柱状图:

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

但这似乎并不正确。与第一个柱状图相比,红色曲线上的像素点应该在150到200之间,绿色曲线在200到255之间。在

我做错什么了?关于calcHist函数中的范围和容器,我还不了解什么?在

谢谢你


Tags: 函数https图像颜色pltrgb像素色调
1条回答
网友
1楼 · 发布于 2024-04-18 19:11:26

你要求一个范围在[09]上,这样输出值就在这个范围内。从第一个柱状图来看,这里似乎只有蓝色。在[0 256]上绘制了9个值,但仍有9个值。在

每个值可以有10个范围:

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()

相关问题 更多 >