2014-03-20 3 views
1

Я пытаюсь построить образ с imshow, но я получаю результаты, которые я не ожидал ... Метод, чтобы показать мое изображение является:Показать изображение с imshow - Matplotlib/Python

def generate_data_black_and_white_heat_map(data, x_axis_label, y_axis_label, plot_title, file_path): 
     plt.figure() 
     plt.title(plot_title) 
     plt.imshow(data.data, extent=[0, data.cols, data.rows, 0], cmap='Greys') 
     plt.xlabel(x_axis_label) 
     plt.ylabel(y_axis_label) 
     plt.savefig(file_path + '.png') 
     plt.close() 

Мои данные представлены в виде:

def __init__(self, open_image=False): 
     """ 
     The Data constructor 
     """ 
     self.data = misc.lena()/255.0 
     x, y = self.data.shape 
     self.rows = x 
     self.cols = y 

я сделать некоторые расчеты и в какой-то момент я должен сделать это:

# A -> 2D ndarray 
A.data[A.data >= 0.5] = 1.0 
A.data[A.data < 0.5] = 0.0 

Что дает м е:

enter image description here

Но я хочу противоположный (белый фон). Таким образом, я просто сделал это:

# A -> 2D ndarray 
A.data[A.data >= 0.5] = 0.0 
A.data[A.data < 0.5] = 1.0 

И потом, я получил это (!!!):

enter image description here

Я просто не получить его. Это имеет смысл для меня. И странно, потому что, если я это сделаю:

for x in range(A.cols): 
     for y in range(A.rows): 
      if A.data[x][y] >= 0.5: 
       A.data[x][y] = 0.0 
      else: 
       A.data[x][y] = 1.0 

Это работает. Я обращаюсь к чему-то не так?

Любая помощь, чтобы прояснить это в моем сознании, будет очень признательна.

Заранее спасибо.

ответ

1

Он делает именно то, что вы говорите это сделать:

A[A >= 0.5] = 0.0 # all of you values are now < 0.5 
A[A < 0.5] = 1.0 # all of your values are now 1 

Это гораздо лучше просто сделать

B = A > .5 # true (1) where above thershold 
iB = B < .5 # true (1) where below threshold 
+0

Проклятье! Конечно! Спасибо! : D 5 часов программирования делают это с людьми .. Rs. – pceccon

Смежные вопросы