Ich habe ein RGB-Bild. Wenn ich dieses Bild importiere, wandle ich es unter Verwendung von matplotlib.color
in HSV um und speichere das resultierende Array in einem dict. Wenn ich dieses Bild anzeigen möchte, verwende ich Image.fromarray
mit mode = 'HSV'
. Ich bin mir nicht sicher, was ich falsch mache, aber wenn das Bild angezeigt wird, bekomme ich ein Chaos (siehe unten mit Code). Jede Hilfe wird geschätzt. Die folgenden Codefragmente sind grob gesagt das, was bei einer bestimmten Menge importierter Bilder passiert.Python 3.5: PIL Image.fromarray produziert unsinniges Bild
RGB zu HSV-Code:
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
Speicherung von Daten:
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
Bau von Array zum Anzeigen von Bild:
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
von Bild angezeigt:
preImArray = halThrThsnd.getImage(self.imagePaths[self.imageIndex])
self.preIm = Image.fromarray(preImArray, 'HSV')
Und schließlich das resultierende Bild:
Warum machen Sie nicht alle Bilder in scikit-image (wie Sie es bereits importieren)? Es ist viel spezialisierter, daher ist es weniger wahrscheinlich, dass Sie einen Fehler machen. Abhängig von Farbdimensionen und Farbformaten kann es mühsam sein, die richtigen Typen für alle diese Operationen zu behalten (z. B. interne Gleitkommazahlen oder vorzeichenlose Ganzzahlen). Es kann natürlich auch die Farbkonversion sowie die Ausgabe eines aktuellen Bildes durchführen. – sascha