我正在尝试获得一张图片的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函数中的范围和容器,我还不了解什么?在
谢谢你
你要求一个范围在[09]上,这样输出值就在这个范围内。从第一个柱状图来看,这里似乎只有蓝色。在[0 256]上绘制了9个值,但仍有9个值。在
每个值可以有10个范围:
相关问题 更多 >
编程相关推荐