2016-04-22 13 views
0

ich ein Bild in ein Array umgewandelt und ich mag diese Werte bipolar ändern (1, -1) wie folgt aus:, wie der Wert in einem Array ändern, um einen negativen

im = Image.open("letter_d.png").convert("L") 
ar = np.array(im) 
ar[ar == 0] = 1 
ar[ar == 255] = -1 

ich etwas wie folgt aus:

[[255 1 1 1 255 255 255] 
[ 1 1 1 1 1 255 255] 
[ 1 1 255 255 1 1 255] 
[ 1 1 255 255 255 1 1] 
[ 1 1 255 255 255 1 1] 
[ 1 1 255 255 255 1 1] 
[ 1 1 255 255 1 1 1] 
[ 1 1 1 1 1 1 255] 
[255 255 255 255 255 255 255]] 

Das Problem ist, dass die 255 Werte gleich bleiben, bemerkte ich, dass es geht, wie 2, wenn stattdessen ich versuche, sie auf einen positiven Wert zu ändern.

+0

Welche Datentyp ist Ihr Array ('ar.dtype') automatisch konvertieren? Wenn der Datentyp "np.uint8" lautet, können Sie ihn nicht zu einem negativen Wert ändern, ohne ein Array eines anderen Typs zu erstellen. – mgilson

Antwort

4

Es sieht aus wie Sie eine Reihe von dtype uint8 haben:

>>> ar = np.array([0, 255], dtype=np.uint8) 
>>> ar 
array([ 0, 255], dtype=uint8) 
>>> ar[1] = -1 
>>> ar 
array([ 0, 255], dtype=uint8) 
>>> ar[1] = -2 
>>> ar 
array([ 0, 254], dtype=uint8) 

Wenn dies der Fall ist, können Sie keine negativen Werte haben (die u in uint8 bedeutet "unsigned"). Wenn Sie versuchen, einen negativen Wert von -1 festzulegen, "wickelt" es sich um den maximalen Wert (Komplement der 2).

Sie müssen in einen anderen (signierten) Typ konvertieren.

>>> signed_array = np.array(ar, dtype=int) 
>>> signed_array 
array([ 0, 254]) 
>>> signed_array[1] = -1 
>>> signed_array 
array([ 0, -1]) 

Der Typ, den Sie wahrscheinlich wählen, hängt von Wertebereich Sie gehen dort zu packen, aber int/np.int32 sollte für die meisten Anwendungen ziemlich sicher sein ...

0

Konvertieren des Array np.int8 mit werden die 255 s -1 s

Verwandte Themen