2016-08-03 1 views
1

나는 RGB 이미지를 가지고있다. 이 이미지를 가져 오면 matplotlib.color을 사용하여 HSV로 변환하고 결과 배열을 dict에 저장합니다. 이 이미지를 표시하려면 Image.fromarraymode = 'HSV'을 사용합니다. 내가 뭘 잘못하고 있는지 모르겠지만 이미지가 표시 될 때 코드가 아래에 보이는 엉망이 생깁니다. 어떤 도움을 주셔서 감사합니다. 아래의 코드 스 니펫은 가져온 이미지 집합에 대해 대략적으로 발생합니다.파이썬 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 : 모든 프로세스에서 동일한 라이브러리를 사용하여 좋은 이미지를 얻었습니다.

관련 문제