2016-08-03 7 views
1

私はRGB画像を持っています。この画像をインポートすると、matplotlib.colorを使ってHSVに変換し、結果の配列をdictに保存します。この画像を表示したいときは、Image.fromarraymode = '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') 

そして最後に、結果の画像:ユーザーあたりサシャさんのコメントとして

enter image description here

+1

scikit-image内のすべての画像を(まだインポートしているので)しないのはなぜですか?それははるかに専門化されているので、エラーを起こす可能性は低くなります。色の寸法や色のフォーマットによっては、これらの操作(たとえば、内部の浮動小数点数や符号なし整数など)に適したタイプを維持するのは面倒です。もちろん、現在の画像を出力するだけでなく、色変換を行うこともできます。 – sascha

答えて

0

は(質問下記参照)、私はHSV変換のために使用しているライブラリを正常化することを決めました。私がそれをしたら、普通の画像が得られました。画像変換に使用するライブラリに応じて、異なるHSV値の範囲が得られることが判明しました。一部のライブラリでは、0〜1の範囲が生成されます。

Tl; dr:すべてのプロセスで同じライブラリが使用され、良好な画像が得られます。

関連する問題