(Загрузка файла .mat как изображения в OpenCV) - Изменение массива с 128 каналами на 3 канала - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь загрузить изображение .mat, экспортированное из Tensorflow, с помощью Scipy.io, используя OpenCV.

Я могу изменить код Tensorflow, чтобы экспортировать изображение .mat только с 3-мя каналами напрямую, но я потеряю многоданных, и это выглядит неправильно даже.

И вот почему я пытаюсь экспортировать необработанные данные как есть.

В моем случае я загружаю файл .mat с помощью scipy.и получить массив NumPy, который выглядит следующим образом

(640, 640, 128)

, и я хочу изменить его, потому что OpenCV не может загрузить изображение с 128 каналами.

(640, 640, 3)

Я не совсем понимаю концепцию изменения формы и думаю, что делаю это неправильно.

Я получаю эту ошибку:

ValueError: невозможно преобразовать массив размером 52428800 в форму (640 640,3)

Спасибо и хорошего дня,

Хешам


Редактировать 1: Это код:

import cv2
import scipy.io as sio
import numpy as np

matfile = 'docia.mat'
img = sio.loadmat(matfile)

img_reshaped = img['embedmap'].reshape(640, 640, 3)

cv2.imshow("segmented_map", img['embedmap'])
cv2.waitKey(0)`

1 Ответ

0 голосов
/ 27 сентября 2018

Повторное формирование используется, когда вы хотите сохранить все данные, но в другой форме.Я считаю, что вы пытаетесь сбросить 125 из 128 каналов.Для этого вы можете просто использовать индексирование, чтобы получить первые 3 канала:

img_reshaped = img['embedmap'][:, :, :3]

Также вы передаете img ['embedmap'], а не измененный img_reshaped в cv2.imshow ().

Хотя я бы рекомендовал смотреть на них 1 на 1 в оттенках серого.

for i in range(128):
    cv2.imshow("segmented_map", img['embedmap'][:, :, i])
    cv2.waitKey(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...