Показать изображение с imshow — Matplotlib/Python

Я пытаюсь построить изображение с помощью imshow, но получаю результаты, которых не ожидал... Способ показать мое изображение:

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

Что дает мне:

введите здесь описание изображения

А я хочу наоборот (белый фон). Итак, я просто сделал это:

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

И тут у меня получилось (!!!):

введите здесь описание изображения

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

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

Оно работает. Я обращаюсь к чему-то неправильным образом?

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

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


person pceccon    schedule 20.03.2014    source источник


Ответы (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
person tacaswell    schedule 20.03.2014
comment
Черт возьми! Конечно! Благодарю вас! :D 5 часов программирования с людьми.. рупий. - person pceccon; 21.03.2014