试图找出如何完成这项任务:我想根据亮度选择图像的像素,然后获取这些像素的rgb值
我最初的想法是使用OpenCV在图像灰度上绘制直方图:
img = cv2.imread('test.jpg',0)
hist = cv2.calcHist([img],[0],None,[256],[0,256])
但我不确定如何识别直方图中特定区域中的像素在图像中的位置
或者,我发现这个公式可以得到亮度:
(0.2126*R + 0.7152*G + 0.0722*B)
所以我想我可以用这个公式迭代图像中的任何一个像素,并获取与我选择的亮度级别相匹配的像素
有没有更好的方法在Python中实现这一点
首先,虽然sRGB或Rec709的系数是正确的,但要将颜色转换为Y
…它们要求RGB通道全部线性化,以消除任何伽马编码
其次,这些是Rec709或sRGB的系数,但其他颜色空间需要不同的系数
图书馆
我推荐KenSolaar的ColorScience,这是一个python库,可以转换为亮度,并使用numpy和矢量化数学
https://github.com/colour-science/colour
转换和跟踪像素值
直接将sRGB像素转换为亮度:
综上所述:
这是最简单的,但仍然相当准确,但是一些纯粹主义者可能建议使用IEC指定的sRGB TRC,这在分段和计算上更昂贵:
不是吗?
下一个问题是,如何确定像素,这只是创建并填充一个列表(数组),其中包含与亮度匹配的像素的坐标和颜色值
是否要将亮度量化回8位整数值?还是停留在0.0到1.0之间并定义一个范围?后者通常最有用,所以让我们这样做吧
对于
cv2.imread('test.jpg',1)
不要将标志设置为0-您将创建自己的灰度,并希望保存颜色像素值,对吗因此,使用前面的示例,但使用三值分段TRC方法,并添加一个循环,为找到的像素添加一个数组:
很有可能有一种方法可以将其矢量化,因此值得看看我上面链接的颜色科学库,因为它尽可能做到这一点
相关问题 更多 >
编程相关推荐