我正在尝试使用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)`
答案 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)