【问题标题】:How to convert a 1D python list containing image data into a numpy array and display it如何将包含图像数据的 1D python 列表转换为 numpy 数组并显示它
【发布时间】:2017-11-27 21:45:40
【问题描述】:

好的,我问了一个与 vrep 相关的类似问题,但它有点具体,而事实上,一个更简单的基于 python 的问题会更有用。但是,如果有人能够提供有用的信息,我会留下这个问题。

这是问题;如何获取包含图像数据的一维列表,将其转换为 numpy 数组然后显示?

这是我目前所拥有的:

im = np.array(image, dtype=np.uint8)
im.resize(128,128,3) #reshape this array into an image form (e.g. rather than 49152)
mlp.imshow(im)
pylab.show(im)

这里,图像是从 simxGetVisionSensorImage 返回的(如果你不知道 vrep 的东西,这并不重要)并且是一个列表。然后我尝试创建一个 numpy 数组并读取数据,将其从有符号 8 位整数转换为无符号 8 位整数。然后我调整它的大小(它是一个 49152 长度的列表,对应于 128x128 的分辨率)并尝试使用 matplotlib 或 pylab 显示它。

如果您需要,这里是包含的:

import numpy as np
import matplotlib.pyplot as mlp
import pylab

matplotlib.show 命令甚至不显示图像窗口。 pylab.show 命令抛出此错误:

Traceback (most recent call last):
File "vrep_epuck.py", line 59, in <module>
pylab.show(im)
File "/usr/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 244, in show
return _show(*args, **kw)
File "/usr/lib/python2.7/dist-packages/matplotlib/backend_bases.py", line 165, in __call__
if block:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

如果您想查看整个代码或查看 vrep 内容,这里是原始 vrep 问题的链接:

vrep question

【问题讨论】:

  • 您可以尝试在调整大小之前和之后打印 im 数组的维度吗?
  • 当然。我使用 im.shape 给我在 im = np.array(image, dtype=np.uint8) 打印 (49152,) 之后的尺寸,我在 im.resize(128,128,3) 打印后再次使用 im.shape ( 128, 128, 3) 我不知道为什么最初打印输出中有逗号,然后没有数字。

标签: python arrays list numpy matplotlib


【解决方案1】:

这将有助于保持通常的命名约定。
因为那样会更明显pyplot.show() 不会将图像作为参数。因此,不要使用pyplot.show(some_image_as_argument),而只需使用pyplot.show()

import matplotlib.pyplot as plt

image = ...
im = np.array(image, dtype=np.uint8)
im.resize(128,128,3) 

plt.imshow(im)
plt.show()

【讨论】:

  • 抱歉,我遵循了一个教程,那个人使用了“mlp”。那么 pyplot.show() 将一个 numpy 数组作为参数,然后 pyplot.show() 显示它?我试过你的代码,它仍然没有显示图像。没有错误消息,代码仍在运行,但没有显示图像。我应该提到,这段代码是在一个while循环中实现的。 (完整的代码可以在问题中提供的链接上查看,但主要是 vrep 的东西)。
  • 你能在for循环之外试试上面的代码吗?上面的代码非常标准,它适用于我从网上下载的示例 128x128 RGB。
  • 图片没有出现在原始代码中的原因(假设您已经删除了 pylab 并使用了上面的代码)仍然很多。如果连接没有返回任何内容或vrep.simxGetConnectionId(clientID)==-1error!=vrep.simx_return_ok 都将导致图像不显示。您需要自己调试代码(没有其他人可以为您执行此操作)并找出实际执行的命令。
  • @omdv 是的,我已经尝试了循环外的代码,但它似乎仍然没有出现。
猜你喜欢
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
相关资源
最近更新 更多