2016-11-06 5 views
0

Vielen Dank für das Lesen meiner Frage.Bild (np.array) in Binärbild umwandeln

Ich bin neu bei Python und wurde von Scipy interessiert. Ich versuche herauszufinden, wie ich das Bild des Racoon (in Scipy Misc) zu einem binären (schwarz, weiß) machen kann. Dies wird nicht in der Scipy-Vorlesung erklärt.

Dies ist so weit mein Code:

%matplotlib inline 
import matplotlib.pyplot as plt 
import numpy as np 
from scipy import misc #here is how you get the racoon image 

face = misc.face() 
image = misc.face(gray=True) 
plt.imshow(image, cmap=plt.cm.gray) 
print image.shape 

def binary_racoon(image, lowerthreshold, upperthreshold): 
    img = image.copy() 
    shape = np.shape(img) 

    for i in range(shape[1]): 
     for j in range(shape[0]): 
      if img[i,j] < lowerthreshold and img[i,j] > upperthreshold: 
       #then assign black to the pixel 
      else: 
       #then assign white to the pixel 

    return img 

    convertedpicture = binary_racoon(image, 80, 100) 
    plt.imshow(convertedpicture, cmap=plt.cm.gist_gray) 

ich andere Leute OpenCV gesehen haben mit einem Bild binär zu machen, aber ich frage mich, wie ich es auf diese Weise tun können, über die Pixel durch Looping? Ich habe keine Ahnung, welchen Wert ich der oberen und unteren Schwelle geben soll, also habe ich eine Schätzung von 80 und 100 gemacht. Gibt es auch eine Möglichkeit, dies zu bestimmen?

+0

Warum würden Sie erwarten 'lowerthreshold> img [i, j] und img [i, j]> upperthreshold' jemals sein' true'? Das würde bedeuten, dass "80> 100"! – Eric

Antwort

1

Sie Grübeln dies:

def to_binary(img, lower, upper): 
    return (lower < img) & (img < upper) 

In numpy, die Vergleichsoperatoren über das gesamte Array element gelten. Beachten Sie, dass Sie & verwenden anstelle von and die booleans zu kombinieren, da Python nicht numpy erlaubt and

+0

ah, und ich sehe auch, dass ich "oder" verwenden musste, wenn ich meine Richtung fortsetzen wollte – User12049279432

1

Sie, um eine Überlastung nicht brauchen über die x- und y-Positionen der Bildanordnung iterieren. Verwenden Sie das Array numpy, um zu überprüfen, ob sich das Array oberhalb des Schwellenwerts von Interesse befindet. Hier ist ein Code, der ein Boolesches (Wahr/Falsch) -Array als Schwarz-Weiß-Bild erzeugt.

# use 4 different thresholds 
thresholds = [50,100,150,200] 

# create a 2x2 image array 
fig, ax_arr = plt.subplots(2,2) 

# iterate over the thresholds and image axes 
for ax, th in zip(ax_arr.ravel(), thresholds): 
    # bw is the black and white array with the same size and shape 
    # as the original array. the color map will interpret the 0.0 to 1.0 
    # float array as being either black or white. 
    bw = 1.0*(image > th) 
    ax.imshow(bw, cmap=plt.cm.gray) 
    ax.axis('off') 

# remove some of the extra white space 
fig.tight_layout(h_pad=-1.5, w_pad=-6.5) 

enter image description here