私はRGB画像を持っています。この画像をインポートすると、matplotlib.color
を使ってHSVに変換し、結果の配列をdictに保存します。この画像を表示したいときは、Image.fromarray
とmode = 'HSV'
を使用します。私は何が間違っているのかは分かりませんが、画像が表示されているとき、私は混乱してしまいます。どんな助けもありがとうございます。以下のコードスニペットは、インポートされたイメージの任意のセットに対して順序どおりに起こるものです。Python 3.5:PIL Image.fromarrayはナンセンス画像を生成します
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')
そして最後に、結果の画像:ユーザーあたりサシャさんのコメントとして
scikit-image内のすべての画像を(まだインポートしているので)しないのはなぜですか?それははるかに専門化されているので、エラーを起こす可能性は低くなります。色の寸法や色のフォーマットによっては、これらの操作(たとえば、内部の浮動小数点数や符号なし整数など)に適したタイプを維持するのは面倒です。もちろん、現在の画像を出力するだけでなく、色変換を行うこともできます。 – sascha