Как читать из файла .mat в список python? - PullRequest
1 голос
/ 09 апреля 2020

У меня есть MATLAB .mat -файл, из которого я хочу прочитать значения и сохранить его в списке python. Файл .mat содержит значения пикселей изображений, которые я sh должен прочитать и сохранить в списке.

Я пробовал, используя scipy, поскольку сообщение предлагает:

from scipy.io import loadmat
annots = loadmat('C://Users//user//Downloads//OCR//dataset//Icdar.Train.Robust.all.mat')
print(annots['e'][0])

Это вывод, который я получаю.

runfile('C:/Users/user/Downloads/OCR/OCR_try/TextRecogUnsupervised/try.py', wdir='C:/Users/user/Downloads/OCR/OCR_try/TextRecogUnsupervised')
[(array([[65, 65, 65, ..., 57, 57, 57]], dtype=uint8), array([[[ 83, 178, 146, ...,  53,  62, 169],
        [131, 179, 150, ...,  57,  62, 168],
        [191, 182, 155, ...,  55,  63, 168],
        ...,
        [173, 167, 174, ...,  49,  45, 129],
        [179, 170, 164, ...,  46,  43, 122],
        [181, 173, 160, ...,  50,  41, 120]],

       [[136, 177, 143, ...,  65,  56, 158],
        [190, 178, 147, ...,  66,  59, 159],
        [202, 180, 151, ...,  63,  61, 164],
        ...,
        [183, 168, 173, ...,  50,  42, 126],
        [187, 171, 161, ...,  48,  45, 121],
        [191, 173, 156, ...,  51,  45, 120]],

       [[186, 178, 140, ...,  95,  47, 140],
        [187, 177, 142, ...,  96,  52, 148],
        [180, 176, 145, ...,  99,  56, 162],
        ...,
        [185, 172, 170, ...,  51,  42, 119],
        [185, 173, 156, ...,  51,  48, 118],
        [190, 174, 150, ...,  51,  52, 116]],

       ...,

       [[108, 137, 138, ...,  99,  49, 100],
        [ 96, 130, 140, ...,  93,  49, 105],
        [103, 122, 139, ...,  88,  48, 115],
        ...,
        [184, 154, 137, ...,  58,  46,  95],
        [185, 154, 140, ...,  57,  45,  97],
        [188, 151, 144, ...,  56,  44,  98]],

       [[129, 142, 151, ...,  93,  54, 104],
        [118, 143, 154, ...,  89,  51, 109],
        [105, 144, 153, ...,  88,  48, 114],
        ...,
        [194, 167, 151, ...,  59,  44,  95],
        [184, 169, 153, ...,  59,  43,  95],
        [185, 166, 156, ...,  58,  42,  94]],

       [[202, 148, 158, ...,  95,  55, 107],
        [180, 155, 162, ...,  93,  53, 109],
        [159, 162, 161, ...,  93,  49, 111],
        ...,
        [179, 175, 157, ...,  60,  44,  95],
        [173, 178, 159, ...,  60,  43,  94],
        [184, 175, 161, ...,  59,  41,  91]]], dtype=uint8))]

Как прочитать эти значения массива в список python? Не могли бы вы предоставить код python для чтения этих значений пикселей в списке. Спасибо

1 Ответ

0 голосов
/ 09 апреля 2020

Я не уверен, что list - лучший тип данных для хранения значений пикселей изображений.

Наиболее подходящим форматом является тип данных NumPy ndarray (объект).
Именно поэтому вы получаете массивы при загрузке файла .mat.

Трудно сказать из вашего поста, какой был исходный формат (в MATLAB), прежде чем сохранять данные в файл mat.

Я предполагаю, что код для сохранения данных выглядит следующим образом:

I = imread('peppers.png');
e = {};
e{1} = [65, 65, 65, 57, 57, 57];
e{2} = I;

save('sample.mat', 'e');

Я не уверен, должен ли e быть массивом ячеек.
Элемент fist e - это вектор (не изображение).
Второй элемент e - это 3D (RGB) матрица типа uint8.

Python код для чтения файла mat и преобразования в два списка:

from scipy.io import loadmat

annots = loadmat('sample.mat')

#print(annots['e'][0])

a = list(annots['e'][0][0])  # Vector elements
b = list(annots['e'][0][1])  # Image pixel elements

Отображение изображения без преобразования в список:

from matplotlib import pyplot as plt
from scipy.io import loadmat

annots = loadmat('sample.mat')

# The image in located at the second index of annots['e'][0]
img = annots['e'][0][1]

plt.imshow(img)
plt.show(block=True) # Show image with "blocking"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...