Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.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 使用matplotlib将数组转换为图像_Python_Numpy_Matplotlib - Fatal编程技术网

Python 使用matplotlib将数组转换为图像

Python 使用matplotlib将数组转换为图像,python,numpy,matplotlib,Python,Numpy,Matplotlib,我试图从一个单一的角度来预测深度。预测结果为.mat结构 {'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Mon Jun 24 20:53:06 2019', '__version__': '1.0', '__globals__': [], 'mat': array ([[[[45.593273 ], [44.393333 ], [45.71833 ], ..., [20.

我试图从一个单一的角度来预测深度。预测结果为.mat结构

{'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Mon Jun 24 20:53:06 2019', '__version__': '1.0', '__globals__': [], 'mat': array

 ([[[[45.593273 ],
     [44.393333 ],
     [45.71833  ],
     ...,
     [20.923761 ],
     [22.743704 ],
     [25.33584  ]],

    [[44.40423  ],
     [43.71836  ],
     [45.744335 ],
     ...,
     [17.319963 ],
     [18.493673 ],
     [19.687391 ]],

    [[45.414154 ],
     [45.360767 ],
     [46.82794  ],
     ...,
     [17.41372  ],
     [18.701914 ],
     [19.105356 ]],

    ...,

    [[ 6.8809724],
     [ 6.5185905],
     [ 6.602861 ],
     ...,
     [ 6.6090174],
     [ 6.587162 ],
     [ 7.3165007]],

    [[ 7.0013733],
     [ 6.384803 ],
     [ 6.6147423],
     ...,
     [ 6.46376  ],
     [ 6.434711 ],
     [ 7.4840846]],

    [[ 7.9435554],
     [ 6.6214004],
     [ 6.654035 ],
     ...,
     [ 7.4519753],
     [ 7.712751 ],
     [ 9.646708 ]]]], dtype=float32)}  
最后一个元素mat是数组类型。我想获取mat数组并使用matplotlib进行打印

当我得到上面的类型和形状时,我得到了这个

数组的类型是
。 数组的形状是
(1,96320,1)

我无法理解这意味着什么
(1,96,320,1)
从未见过具有4个参数的这种形状

将scipy.io导入为sio
将numpy作为np导入
将matplotlib.pyplot作为plt导入
mat内容=sio.loadmat('2011\u 09\u 26\u驱动器\u 0002\u同步\u图像\u 00000000 23\u图像\u 02.mat')
#打印(材料内容)
打印(mat_content.keys())
数组内容=mat内容['mat']
打印(数组内容)
打印('数组类型为',类型(数组内容))
打印('数组的形状为',数组\内容.shape)
#plt.绘图(数组内容)
#plt.show()
当我运行上面的代码时,我得到了这个错误

回溯(最近一次呼叫最后一次):
文件“2.py”,第11行,在
plt.绘图(数组内容)
文件“C:\Users\snanr\Anaconda3\lib\site packages\matplotlib\pyplot.py”,第2811行,在plot中
不是别的{},**kwargs)
文件“C:\Users\snanr\Anaconda3\lib\site packages\matplotlib\\uuuu init\uuuu.py”,第1810行,在内部
返回函数(ax,*args,**kwargs)
文件“C:\Users\snanr\Anaconda3\lib\site packages\matplotlib\axes\\u axes.py”,第1611行,在绘图中
对于自身中的行。获取行(*args,**kwargs):
文件“C:\Users\snanr\Anaconda3\lib\site packages\matplotlib\axes\\u base.py”,第393行,位于下一个参数中
从自身获得的收益。_plot_args(本,kwargs)
文件“C:\Users\snanr\Anaconda3\lib\site packages\matplotlib\axes\\ u base.py”,第370行,在绘图参数中
x、 y=自。_xy_自_xy(x,y)
文件“C:\Users\snanr\Anaconda3\lib\site packages\matplotlib\axes\\ u base.py”,第234行,在\u xy\u中
“形状{}和{}”。格式(x.shape,y.shape))
ValueError:x和y不能大于二维,但具有形状(1、)和(1、96、320、1)

我希望输出能够使用数组,并使用matplotlib将数组打印为图像。

出于某种原因,您的输入数组看起来是四维的,但其中两个维度只有1-deep。大胆猜测深度大于1的维度是您可以尝试的感兴趣的维度

array_content = mat_content['mat'][0,:,:,0]
这将把你的4D阵列分割成2D阵列。下面是一个简单的示例:

import numpy

x=numpy.zeros([1,96,320,1])
print(x.shape)
print(x[0,:,:,0].shape)

因此,我不知道您用于显示图像的库是否重要,但有一种更干净的解决方案,它不需要您对阵列进行切片和操作。我将要包含的代码使用一个名为PIL的库。如果您是在环境中运行代码,请快速执行Pip安装Pillow(Pip安装Pillow将是提示符中的命令)

我的代码获取图像,打印出矩阵,并将图像显示在matplotlib图形上。您需要在代码中更改的唯一内容是您正在使用的文件名。确保您正确加载了文件名,并且应该可以正常运行

将numpy导入为np
从PIL导入图像
将matplotlib.pyplot作为plt导入
image\u object=image.open(“file\u path.jpg”)
矩阵=np.asarray(图像\对象)
打印(矩阵)
PIL_object=Image.fromarray(矩阵)
plt.imshow(PIL_对象)
plt.show()

如果这是错误的方法,我道歉!希望有帮助

arr=array\u content[0,:,:,:,0]
arr=np。挤压(array\u content)
应删除额外的1维尺寸。
plt.plot
需要一个二维数组来绘制线图。您的阵列为4-D。通常,如果要绘制图像,请使用
plt.imshow
。我仍然不确定它是否能够绘制一个4-D阵列