Python 3.5: PIL Image.fromarray 产生无意义的图像
Python 3.5: PIL Image.fromarray producing nonsense image
我有一个 RGB 图像。当我导入此图像时,我使用 matplotlib.color
将其转换为 HSV 并将生成的数组保存在字典中。当我想显示这个图像时,我使用 Image.fromarray
和 mode = '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:在所有进程中使用相同的库,获得了良好的图像。
我有一个 RGB 图像。当我导入此图像时,我使用 matplotlib.color
将其转换为 HSV 并将生成的数组保存在字典中。当我想显示这个图像时,我使用 Image.fromarray
和 mode = '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:在所有进程中使用相同的库,获得了良好的图像。