【问题标题】:How to convert python list of points to numpy image array?如何将python点列表转换为numpy图像数组?
【发布时间】:2012-09-22 03:39:21
【问题描述】:

我有一个 Python 点列表(x/y 坐标):

   [(200, 245), (344, 248), (125, 34), ...]

它表示二维平面上的轮廓。我想使用一些 numpy/scipy 算法进行平滑、插值等。它们通常需要 numpy 数组作为输入。例如scipy.ndimage.interpolation.zoom

从我的点列表中获取正确的 numpy 数组的最简单方法是什么?

编辑:我在我的问题中添加了“图像”一词,希望现在清楚,如果它在某种程度上具有误导性,我真的很抱歉。我的意思的例子(指向二进制图像数组)。

输入:

[(0, 0), (2, 0), (2, 1)]

输出:

[[0, 0, 1],
 [1, 0, 1]]

此处接受的答案是工作示例

import numpy as np

coordinates = [(0, 0), (2, 0), (2, 1)]

x, y = [i[0] for i in coordinates], [i[1] for i in coordinates]
max_x, max_y = max(x), max(y)

image = np.zeros((max_y + 1, max_x + 1))

for i in range(len(coordinates)):
    image[max_y - y[i], x[i]] = 1

【问题讨论】:

  • numpy.array(your_list) 可能是一个好的开始...?
  • 不是一个开始...但真正的意思是代表无论如何...

标签: python numpy scipy


【解决方案1】:

啊,现在好多了,所以你确实有所有你想要填补的点......那么它很简单:

image = np.zeros((max_x, max_y))
image[coordinates] = 1

你可以先创建一个数组,但这不是必须的。

【讨论】:

  • @Alex,好吧,您可能必须知道缩放对图像的作用......顺便说一句。忘了设置数据类型(np.zeros((max_x, max_y), dtype=bool)),不过如果你想放大,也许没有意义。
【解决方案2】:
numpy.array(your_list)

numpy 有非常丰富的文档,您应该尝试阅读。你可以在网上找到它,或者在 REPL 上输入help(obj_you_want_help_with)(例如help(numpy))。

【讨论】:

  • 很抱歉,这对我有什么帮助?我说我需要一个 numpy 数组,我可以将它用作 scipy 函数的输入,并举了一个例子(缩放)。
【解决方案3】:

基于 Jon Clements 和 Dunes 所说的,在做之后

new_array = numpy.array([(200, 245), (344, 248), (125, 34), ...])

您将得到一个二维数组,其中第一列包含 x 坐标,第二列包含 y 坐标。该数组可以进一步拆分为单独的 x 和 y 数组,如下所示:

x_coords = new_array[:,0]
y_coords = new_array[:,1]

【讨论】:

  • ... 或直接使用(x_coords, y_coords)=new_array.T,其中.T.transpose() 方法的快捷方式。
  • Rigt,皮埃尔 GM。我几乎提到了这一点,因为它是我的首选方式,因为它使用的命令更少。我决定从概念的角度来看,我写的内容可能更简单。不过,例子越多越好。
猜你喜欢
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
  • 1970-01-01
  • 2014-05-15
  • 2018-09-25
  • 2023-03-17
  • 2010-09-27
相关资源
最近更新 更多