Как преобразовать «матрицу» в «изображение»? - PullRequest
0 голосов
/ 26 марта 2019

У меня есть список «L».Я хочу использовать этот список номеров, чтобы создать карту для изображения.Поэтому я сначала создаю матрицу "n", аналогичную размеру входного изображения. 2084, 2084

L = [234, 78, 56, 98, 555, 876, 998 ...] 
n = np.zeros((2084, 2084), dtype = "uint8")

Это дает мне матрицу размера - 2084 x 2084. Теперь я сглаживаю ее досоздайте из него массив.

j = n.flatten()

Поскольку я хочу создать это изображение в оттенках серого и заменить позиции на этом изображении, которые указаны в списке «L», на белый.Я заменяю 0 в массиве на 255

for i in L:
  j[i] = 255

После этого я изменяю массив в матричную форму.

 o  = np.reshape(j, (2084, 2084))

Но когда я пытаюсь открыть это o, используя только matplotlib iполучить черное изображение без белого пикселя, которое должно было быть там из-за значения 255 в матрице.

plt.imshow(o, cmap="gray", vmin=0, vmax=255)

Я хотел бы использовать числа в Списке для сопоставления их значений как местоположений на изображениии измените цвет этого местоположения на белый.

Я могу ошибаться, понимая некоторые основные принципы, относящиеся к изображению, но некоторая помощь здесь будет признательна

Ответы [ 2 ]

2 голосов
/ 26 марта 2019

Я предполагаю, что это проблема разрешения экрана.Использование вашего кода (немного упрощенного), но уменьшение разрешения явно работает:

import matplotlib.pyplot as plt
import numpy as np

L = [234, 78, 56, 98, 555, 876, 998]
n = np.zeros((32, 32), dtype="uint8")
n.ravel()[L] = 255

plt.figure(figsize=(2.5, 2.5))
plt.imshow(n, cmap="gray", vmin=0, vmax=255)

enter image description here

2048x2048 больше моего разрешения экрана, так что в этом случаеЯ ничего не вижу: каждый пиксель изображения меньше пикселя экрана.Кроме того, все белые точки будут лежать в первом ряду пикселей, что сделает его еще труднее для просмотра.

1 голос
/ 26 марта 2019

В вашем коде нет ничего плохого, но, возможно, ваши белые точки на изображении слишком рассеяны, чтобы видеть их на экране. Если вы хотите увидеть белые точки на изображении, вы можете установить plt сделать большое разрешение, прежде чем показывать его, добавив plt.figure(figsize=(M, M)), где M - большое целое число, такое как 100. Пример кода следующий:

N = 1000
L = [8000, 8001, 8002, 8003, 9000, 9001, 9002, 9003, 10000, 10001, 10002, 10003, 11000, 11001, 11002, 11003]
a = np.zeros((N,N), dtype=np.uint8)
a.ravel()[L] = 255
np.reshape(a, (N,N))
plt.figure(figsize=(100, 100))
_ = plt.imshow(a, cmap="gray", vmin=0, vmax=255)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...