我正在使用skimage
将RGB图像转换为Lab颜色空间,但似乎skimage使用float64
数据类型,而Tensorflow使用float32
。
有没有办法将64位Lab图像转换为32位数据类型?文档没有涵盖任何具体的内容,我不确定使用image.astype(np.float32)
是否可行,因为它可能会损坏数据精度(或不会)。
以下是代码的一部分:
from skimage import color, io
import numpy as np
rgb = io.imread('Test.jpg') # Could be any shape
lab = color.rgb2lab(rgb)
converted = np.array(lab).astype(np.float32)
rgb = color.lab2rgb(converted)
最后一行给出错误:
ValueError: Images of type float must be between -1 and 1.
这是堆栈跟踪:
File "C:\Anaconda3\lib\site-packages\skimage\color\colorconv.py", line 928, in lab2rgb
return xyz2rgb(lab2xyz(lab))
File "C:\Anaconda3\lib\site-packages\skimage\color\colorconv.py", line 855, in lab2xyz
arr = _prepare_colorarray(lab).copy()
File "C:\Anaconda3\lib\site-packages\skimage\color\colorconv.py", line 153, in _prepare_colorarray
return dtype.img_as_float(arr)
File "C:\Anaconda3\lib\site-packages\skimage\util\dtype.py", line 291, in img_as_float
return convert(image, np.float64, force_copy)
File "C:\Anaconda3\lib\site-packages\skimage\util\dtype.py", line 195, in convert
raise ValueError("Images of type float must be between -1 and 1.")
ValueError: Images of type float must be between -1 and 1.
答案 0 :(得分:3)
使用x.astype(np.float32)
是完全可以接受的。你很少需要那种准确度。
但是,如果您不小心,可能会意外地将整数图像(例如,无符号字节,从0到255)转换为float。因此,最安全的方法,将根据需要重新调整,是
from skimage import img_as_float
image = img_as_float(image).astype(np.float32)
答案 1 :(得分:0)