I am doing a LAB to RGB conversion. If my LAB matrix is float64, the bounds for the axes must be -100, 100. Upon analysis of the output RGB image, the results look correct. However, if the LAB matrix is float32 the bounds are checked and forced to -1 1 which yields an RGB image that is incorrect. Upon further inspect, the problem looks like it comes from the convert function in dtype.py. image = np.asarray(image) dtypeobj = np.dtype(dtype) dtypeobj_in = image.dtype dtype = dtypeobj.type dtype_in = dtypeobj_in.type if dtype_in == dtype: if force_copy: image = image.copy() return image at the "if dtype_in == dtype:" the types are float32 and float64 causing the if to be skipped. Eventually the code reaches the point: if kind_in == 'f': if np.min(image) < -1.0 or np.max(image) > 1.0: raise ValueError("Images of type float must be between -1 and 1.") if kind == 'f': # floating point -> floating point if itemsize_in > itemsize: prec_loss() return dtype(image) and the bounds are checked, outside of [-1 1] and an error is thrown. Isaac