Как указал Денис, в lab2rgb
или rgb2lab
нет никаких проверок диапазона, и rgb2lab
, кажется, ожидает значения в диапазоне [0,1].
>>> a = numpy.array([[1,2,3],[4,5,6],[7,8,9]])
>>> a
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> color.lab2rgb(color.rgb2lab(a))
array([[ -1.74361805e-01, 1.39592186e-03, 1.24595808e-01],
[ 1.18478213e+00, 1.15700655e+00, 1.13767806e+00],
[ 2.62956273e+00, 2.38687422e+00, 2.21535897e+00]])
>>> from __future__ import division
>>> b = a/10
>>> b
array([[ 0.1, 0.2, 0.3],
[ 0.4, 0.5, 0.6],
[ 0.7, 0.8, 0.9]])
>>> color.lab2rgb(color.rgb2lab(a))
array([[ 0.1, 0.2, 0.3],
[ 0.4, 0.5, 0.6],
[ 0.7, 0.8, 0.9]])
В цвете.py, функции xyz2lab
и lab2xyz
выполняют некоторые математические операции, которые я не могу с первого взгляда определить (я не очень хорошо разбираюсь в numpy или преобразованиях изображений).
Редактироватьпроблема):
PIL дает вам числа [0,255], попробуйте уменьшить их до [0,1], прежде чем переходить к функции rgb2lab, и обратно при выходе.например:
#from __future__ import division # (if required)
[...]
# Create array of image using numpy
srcArray = numpy.asarray(src)/255
# Convert array from RGB into Lab
srcArray = color.rgb2lab(srcArray)
# Convert array back into Lab
end = color.lab2rgb(srcArray)*255
end = end.astype(numpy.uint8)