Python 使用skimage.color.rgb2lab将RGB转换为实验室
在将RGB像素值转换为实验室空间时,我有一个奇怪的观察结果 让我们采用RGB中的以下参考值Python 使用skimage.color.rgb2lab将RGB转换为实验室,python,image-processing,colors,scipy,scikit-image,Python,Image Processing,Colors,Scipy,Scikit Image,在将RGB像素值转换为实验室空间时,我有一个奇怪的观察结果 让我们采用RGB中的以下参考值 import skimage colors = {'red': np.array((255, 0, 0)), 'orange': np.array((255, 69, 0)), 'yellow': np.array((255, 255, 0)), 'green': np.array((0, 128, 0)), 'blue': np.array((0, 0, 25
import skimage
colors = {'red': np.array((255, 0, 0)), 'orange': np.array((255, 69, 0)),
'yellow': np.array((255, 255, 0)), 'green': np.array((0, 128, 0)),
'blue': np.array((0, 0, 255)), 'white': np.array((255, 255, 255)),
'black': np.array((0, 0, 0)), 'brown': np.array((139, 69, 19)),
'gray': np.array((128, 128, 128))}
现在我使用skimage.color.rgb2lab
将它们转换为实验室颜色空间:
colors_lab = {key: skimage.color.rgb2lab(np.array(np.ones((1, 1, 3)) * value, dtype=int)) for (key, value) in colors.items()}
print(colors_lab)
"""
{'red': array([[[0., 0., 0.]]]),
'orange': array([[[0., 0., 0.]]]),
'yellow': array([[[ 3.55271368e-15, 1.38777878e-14, 5.55111512e-15]]]),
'green': array([[[0., 0., 0.]]]),
'blue': array([[[ 0.00000000e+00, 0.00000000e+00, -5.55111512e-15]]]),
'white': array([[[3.55271368e-15, 0.00000000e+00, 0.00000000e+00]]]),
'black': array([[[0., 0., 0.]]]),
'brown': array([[[0., 0., 0.]]]),
'gray': array([[[0., 0., 0.]]])}
"""
我想我遗漏了什么。红色、橙色、绿色、黑色、棕色和灰色不应具有相同的值[0,0,0]
我错过了什么
答复: 正如@MarkSetchell所建议的,该函数期望RGB数组的元素范围为0到1。(文件中未提及)即
你的
dtype=int
把你搞砸了。试试skimage.color.rgb2lab(np.ones((1,1,3))*[0,0255])
@MarkSetchell我试过了。IIRC它返回了一个数组,该数组包含数千个元素(远远超出了实验室空间的范围),因此我猜该函数需要int
。让我把它添加到问题中。好的,尝试将RGB扩展到范围0..1,即skimage.color.rgb2lab(np.ones((1,1,3))*[0,0,1.0])
蓝色。是的,我们正在努力避免过度依赖数据类型来了解范围,但不幸的是有时需要它。任何关于一个好地方的建议都是受欢迎的,它不需要在整个代码库中添加指向本文档的链接。请加入我们的Zulip聊天或邮件列表,或者提交一个GitHub问题,只要对您最方便。@AhmadMoussa我想这与dtype
有关,如果您的数组。IIRC,文档中提到了数据类型的重要性。
colors_lab = {key: skimage.color.rgb2lab(np.array(np.ones((1, 1, 3)) * value/255)) for (key, value) in colors.items()}
print(colors_lab)
"""
{'black': array([[[0., 0., 0.]]]),
'blue': array([[[ 32.29567257, 79.18559091, -107.85730021]]]),
'brown': array([[[37.46978642, 26.44214425, 40.98418759]]]),
'gray': array([[[ 5.35850135e+01, -1.47264555e-03, 2.79145150e-03]]]),
'green': array([[[ 46.2276577 , -51.69868348, 49.89707556]]]),
'orange': array([[[57.58158901, 67.7824008 , 68.95825825]]]),
'red': array([[[53.24058794, 80.09230823, 67.20275104]]]),
'white': array([[[ 1.00000000e+02, -2.45493786e-03, 4.65342115e-03]]]),
'yellow': array([[[ 97.13950704, -21.55468102, 94.47812228]]])}"""