(在OpenCV中将.mat文件作为图像加载)-将具有128个通道的numpy数组重塑为3个通道

时间:2018-09-27 10:27:49

标签: python matlab numpy opencv tensorflow

我正在尝试使用OpenCV从Scipy.io加载从Tensorflow导出的.mat图像。

我可以修改Tensorflow代码以直接通过3个通道直接导出.mat图像,但是我会丢失很多数据,甚至看起来也不正确。

这就是为什么我试图按原样导出原始数据。

以我为例,我将scipy.io加载到.mat文件中,并得到了如下所示的numpy数组

(640,640,128)

我想重塑形状,因为OpenCV无法加载具有128个通道的图像。

(640,640,3)

我不完全了解“重塑”的概念,我认为我做错了。

我收到此错误:

  

ValueError:无法将大小为52428800的数组重塑为形状   (640,640,3)

谢谢你,祝你有美好的一天,

Hesham


编辑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 :(得分:1)

当您要保留所有数据但形状不同时,将使用重塑。我相信您正在尝试删除128个频道中的125个。为此,您可以使用索引来获取前3个频道:

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

另外,您正在传递img ['embedmap'],而不是将重塑的img_reshaped传递给cv2.imshow()。

尽管我建议您以1灰阶的比例查看它们。

for i in range(128):
    cv2.imshow("segmented_map", img['embedmap'][:, :, i])
    cv2.waitKey(0)