Python (将.mat文件作为OpenCV中的图像加载)-将128个通道的numpy阵列重塑为3个通道
我正在尝试使用OpenCV加载从Tensorflow和Scipy.io导出的.mat图像 我可以修改Tensorflow代码,直接导出只有3个通道的.mat图像,但是我会丢失很多数据,甚至看起来都不正确 这就是为什么我要按原样导出原始数据 在我的例子中,我用scipy.io加载.mat文件,得到如下所示的numpy数组 (640640128) 我想重塑它,因为OpenCV无法加载128个通道的图像 (6406403) 我没有完全理解重塑的概念,我认为我做错了 我得到这个错误: ValueError:无法将大小为52428800的数组重塑为形状 (640,3) 谢谢你,祝你今天愉快 赫瑟姆Python (将.mat文件作为OpenCV中的图像加载)-将128个通道的numpy阵列重塑为3个通道,python,matlab,numpy,opencv,tensorflow,Python,Matlab,Numpy,Opencv,Tensorflow,我正在尝试使用OpenCV加载从Tensorflow和Scipy.io导出的.mat图像 我可以修改Tensorflow代码,直接导出只有3个通道的.mat图像,但是我会丢失很多数据,甚至看起来都不正确 这就是为什么我要按原样导出原始数据 在我的例子中,我用scipy.io加载.mat文件,得到如下所示的numpy数组 (640640128) 我想重塑它,因为OpenCV无法加载128个通道的图像 (6406403) 我没有完全理解重塑的概念,我认为我做错了 我得到这个错误: ValueErro
编辑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)`
当您希望保留所有数据但形状不同时,可以使用“重新成形”。我相信您正在尝试删除128个频道中的125个。为此,您可以使用索引获取前3个通道:
img_reshaped = img['embedmap'][:, :, :3]
另外,您传递的是img['embedmap'],而不是经过重塑的img_,该img_被重塑为cv2.imshow()
虽然我会建议在灰色的范围内逐个查看它们
for i in range(128):
cv2.imshow("segmented_map", img['embedmap'][:, :, i])
cv2.waitKey(0)
请添加一些你已经编辑过的代码。谢谢!这就是我要找的。