Python 3.5: PIL Image.fromarray 产生无意义的图像

Python 3.5: PIL Image.fromarray producing nonsense image

我有一个 RGB 图像。当我导入此图像时,我使用 matplotlib.color 将其转换为 HSV 并将生成的数组保存在字典中。当我想显示这个图像时,我使用 Image.fromarraymode = 'HSV'。我不确定我做错了什么,但是当显示图像时,我弄得一团糟(见下面的代码)。任何帮助表示赞赏。下面的代码片段大致说明了任何给定的导入图像集的顺序。

RGB 转 HSV 代码:

from skimage import io 
import matplotlib.colors as mpclr
import glob
import os 
from PIL import Image, ImageOps

types = ("\*.tif", "\*.jpg", "\*.ppm")
imagePath = []

def importAllImgs(folderPath):

    for ext in types:
        imagePath.extend(glob.glob(folderPath + ext))


    im_coll = io.ImageCollection(imagePath, conserve_memory = True)
    im_array = []    

    for i in range(len(im_coll)):
        #CONVERSION HAPPENS HERE
        image = im_coll[i]
        fltImg = np.around((np.array(image)/255.0), decimals = 2)
        imgHSV = mpclr.rgb_to_hsv(fltImg)

        im_array.append(imgHSV)  

    return im_array, imagePath

数据存储:

def organizeAllData(self, imgArrList, imgPathList):

    self.allImages = dict()            
    self.imageKeys = imgPathList

    for i in range(len(imgPathList)):

        self.allImages[imgPathList[i]] = {'H': imgArrList[i][:, :, 0],
                                            'S': imgArrList[i][:, :, 1],
                                            'V': imgArrList[i][:, :, 2]}


    self.hsvValues = []
    self.labelValues = [] 

    return self.allImages

显示图像的数组构造:

def getImage(self, imageOfInterest):

    H = self.allImages[imageOfInterest]['H'][:,:]
    S = self.allImages[imageOfInterest]['S'][:,:]
    V = self.allImages[imageOfInterest]['V'][:,:]

    imgArray = np.dstack((H,S,V))

    return imgArray

图片显示:

    preImArray = halThrThsnd.getImage(self.imagePaths[self.imageIndex])
    self.preIm = Image.fromarray(preImArray, 'HSV')

最后,生成的图像:

根据用户 sascha 的评论(见下面的问题),我决定规范化我用于 HSV 转换的库。一旦我这样做了,我就没有问题地得到正常的图像。事实证明,根据您用于图像转换的库,您将获得不同的 HSV 值范围。一些库会生成 0 到 1 的范围。其他库会生成 0 到 255 的范围。

Tl;dr:在所有进程中使用相同的库,获得了良好的图像。