Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python (将.mat文件作为OpenCV中的图像加载)-将128个通道的numpy阵列重塑为3个通道_Python_Matlab_Numpy_Opencv_Tensorflow - Fatal编程技术网

Python (将.mat文件作为OpenCV中的图像加载)-将128个通道的numpy阵列重塑为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

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

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

这就是为什么我要按原样导出原始数据

在我的例子中,我用scipy.io加载.mat文件,得到如下所示的numpy数组

(640640128)

我想重塑它,因为OpenCV无法加载128个通道的图像

(6406403)

我没有完全理解重塑的概念,我认为我做错了

我得到这个错误:

ValueError:无法将大小为52428800的数组重塑为形状 (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)`

当您希望保留所有数据但形状不同时,可以使用“重新成形”。我相信您正在尝试删除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)

请添加一些你已经编辑过的代码。谢谢!这就是我要找的。