Python 使用matplotlib将数组转换为图像
我试图从一个单一的角度来预测深度。预测结果为.mat结构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.
{'__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阵列