2017-03-22 3 views
0

Ich habe https://gist.github.com/chsasank/4d8f68caf01f041a6453e67fb30f8f5a für die Bildverarbeitung verwendet. Dies erwartet ein Bild mit nur einem Kanal (siehe assert len(image.shape) == 2) Wie kann der Code so angepasst werden, dass er für Farbbilder funktioniert - also Bilder mit drei Kanälen?Wie passt man einen Algorithmus für Graubilder für Farbbilder an?

+0

Was war an der Frage schlecht? – Make42

+0

Es hängt wahrscheinlich vom gewählten Algorithmus ab. Sie könnten den Algorithmus für jeden Farbkanal separat anwenden und dann irgendwie zusammenführen, Sie könnten das Bild vorher mit Graustufen versehen, Sie könnten die Farben vorher in einen anderen Farbraum umwandeln oder etwas völlig anderes. – Trilarion

Antwort

1

Der einfachste Weg wäre, das Bild in Kanäle aufzuteilen und dann nach Neuabbildung wieder zusammenzuführen.

# make sure it's not gray 
assert len(image.shape) == 3 

# grab the image resolution 
shape = image.shape[:2] 

# random_state, gaussian and meshgrid 
. 
. 
. 

#calculate indices just as before 
indices = np.reshape(x+dx, (-1, 1)), np.reshape(y+dy, (-1, 1)) 

# split the image into 3 channels 
b, g, r = cv2.split(image) 

# do the mapping on all of the channels separately 
b = map_coordinates(b, indices, order=1).reshape(shape) 
g = map_coordinates(g, indices, order=1).reshape(shape) 
r = map_coordinates(r, indices, order=1).reshape(shape) 

# return merged result 
return cv2.merge((b,g,r)) 
+0

Sind Sie sicher, dass 'shape = image.shape [: 1]' korrekt ist? – Make42

+0

@ Make42 danke, natürlich meinte ich [: 2] – m3h0w

Verwandte Themen