У меня есть изображение маски, которое технически представляет собой матрицу, полную значений True / False. Я хотел бы рассмотреть это как изображение. Сначала я преобразовал его в двоичный массив с помощью (astype(np.uint8))

print('Part Mask', p['masks'][class_id].astype(np.uint8))

Но я все еще не могу просмотреть его как изображение в блокноте Python. OpenCV сходит с ума и вылетает ядро.

Кто-нибудь знает, как просмотреть такую структуру как изображение на ноутбуке Python без сбоя ядра?

    [[0 0 0 ... 0 0 0]
     [0 0 0 ... 0 0 0]
     [0 0 0 ... 0 0 0]
     ...
     [0 0 0 ... 0 0 0]
     [0 0 0 ... 0 0 0]
     [0 0 0 ... 0 0 0]]

Или это также будет работать ():

[[False False False ... False False False]
 [False False False ... False False False]
 [False False False ... False False False]
 ...
 [False False False ... False False False]
 [False False False ... False False False]
 [False False False ... False False False]]

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

РЕДАКТИРОВАТЬ: я не могу скопировать вставить весь код здесь, но в основном у меня есть тензор предсказания p, и p[masks][class_id] это то, что я хочу визуализировать (показывая маску каждого класса).

enumerator = 0
# run through the instances
for class_id in p['class_ids']:
    #print('Image:', image) # the original input image
    #print('Mask:', merged_mask) # whole masked image
    print('ID: ', class_names[class_id] + str(enumerator))
    #print('Outline Poses: ', ) # mask boundary coordinates
    #print('Pose:',) # mask center coordinates
    print('Part Mask', p['masks'][class_id].astype(np.uint8)) # how to visualize this as an image?
    print('Confidence: ', p['scores'][class_id])
    print('BB: ', p['rois'][class_id]) # get the BB
    print('--------------------------')
    enumerator = enumerator + 1

enter image description here

П.С .: Matplotlib тоже не работает. Это изображение, которое я получаю, когда пытаюсь распечатать:

enter image description here

0
Schütze 26 Ноя 2018 в 11:32

2 ответа

Лучший ответ

Matplotlib должен работать для вас:

import numpy as np
from matplotlib import pyplot as plt


image = np.eye(10)
binary = image > 0
plt.imshow(binary)
plt.show()

С результатом:

enter image description here

< Сильный > Edit:
Ваше изображение имеет форму (510,7), то, что вы получили выше, как раз то, что вы должны ожидать:

import numpy as np
from matplotlib import pyplot as plt


image = np.eye(510)[:,:7]
binary = image > 0
plt.imshow(binary)
plt.show()

Результаты:
введите описание изображения здесь

0
Dinari 26 Ноя 2018 в 11:23

Возможно, вы можете использовать PIL

from PIL import Image

data = [...]

width = len(data[0])
height = len(data)

output_image = Image.new(mode='1', size=(width, height))

for x in range(height):
    for y in range(width):
        pixel_value = data[x][y]
        output_image.putpixel((x,y), pixel_value)


output_image

С данными = [[0,0,0,0], [0,0,1,1], [1,1,1,0], [0,1,1,0]]

У меня есть такое изображение -> Щелкните и увеличьте изображение до пикселей

0
Nick 26 Ноя 2018 в 09:23