【问题标题】:How to store coordinates into an array in python?如何将坐标存储到python中的数组中?
【发布时间】:2020-10-05 00:25:54
【问题描述】:

我正在开始一个新项目,该项目将涉及拍摄两张图像并比较图像内的点中心。原件将是一张有 27 行 15 列点的图片。第二张图片将是原始图片的变形版本,其中点的位置和形状发生了变化。

要开始这个项目,我需要将原始中心存储在一个数组中。

我已经制定了一个公式来找到原始中每个圆的中心。

X: n = 0..26 [48n+5]
Y: m = 0..14 [48m+5]

例如,点 (2,5) 的中心是

[48(2)+5, 48(5)+5] = [101, 245]

TLDR:我需要帮助使用以下公式存储 (x,y) 坐标

[X,Y] = [48(n)+5 , 48(m)+5] for n = 0..26, m = 0..14

更新:

所以看起来二维数组是我需要使用的。最后,我想为每个坐标分配一个字符串名称。

arr = []
for n in range(27):
    for m in range(27):
        arr.append([48*(m)+5 , 48*(n)+5])

for x in range(405):
print(arr[x])

当前使用此代码编号 0..404 将产生坐标对 (0=[5,5] and 404=[1253,677])。但是,我想要一种更简单的方法来引用每个坐标对,而不是在数字上查找它是哪个对象。

我想将左上角的点命名为 A0。它将具有属性A0 = [5,5] 当您向右移动时,您会到达最右上角的点,中心名称为 A26。它将具有以下属性 A26 = [1253,5] 转到左下点,它的中心将被称为 O0 并具有 O0 = [5,677] 的属性,并且该行将向右跨越,直到它到达右下点的名为 O26 的中心,具有以下属性O26 = [1253,677]

正如您在下图中看到的那样,我希望能够调用将按以下方式格式化的名称网格。

A0...                          ...A26
.                                   .
.                                   .
.                                   .



.                                   .
.                                   .
.                                   .
O0...                          ...O26

所以如果我调用 O26 的坐标,它将返回 [1253,677]

【问题讨论】:

    标签: python arrays python-3.x list image


    【解决方案1】:

    这是二维数组的直接方法:

    arr = []
    for n in range(27):
        for m in range(15):
            arr.append([48*(n)+5 , 48*(m)+5])
    

    3D 数组也是如此:

    arr = []
    for n in range(27):
        sub = []
        for m in range(15):
            sub.append([48*(n)+5 , 48*(m)+5])
        arr.append(sub)
    

    对于第二个,您可以访问nm 的值是arr[n][m]

    同一解决方案的一个衬垫:

    arr = [[[48*n+5 , 48*m+5] for m in range(15)] for n in range(27)]
    

    编辑

    当您修改了标记索引的问题时,我相信最好的方法是通过字典(使用字典理解):

    letters = list('ABCDEFGHIJKLMNO')
    dic = {letters[m]+str(list(range(27))[n]):[48*n+5 , 48*m+5] 
           for m in range(15) for n in range(27)}
    

    地点:

    >>> dic['A1']
    [53, 5]
    >>> dic['A26']
    [1253, 5]
    >>> dic['O0']
    [5, 677]
    >>> dic['O26']
    [1253, 677]
    

    希望对您有所帮助,如果有,请将其标记为一个,如果没有,请告诉我原因。

    【讨论】:

    • 嘿,看来您的答案确实是我用例的最佳答案。我刚刚更新了帖子以澄清一些事情。您将如何解决如上所述标记每个坐标的问题。另请参阅我的下一条评论,了解我对您的 2D 数组所做的工作以使其对我有用。
    【解决方案2】:

    您好,我不太明白您的问题是什么,但是您可以使用以下代码,使用嵌套循环将图像存储在数组或 python 列表中:

    centers = []
    
    for i in range(27):
       for j in range(15): 
          centers.append((48*n+5 , 48*m+5))
    

    但是,如果您在图像处理以及如何将图像转换为 numpy 数组方面需要更多帮助,请使用以下链接: https://www.pluralsight.com/guides/importing-image-data-into-numpy-arrays

    【讨论】:

      【解决方案3】:

      您可以使用简单的list comprehension 来完成您的任务

      [(48*(n) + 5, 48*(m) + 5) for n in range(0, 27) for m in range(0, 15)]
      

      这将为您提供一个元组列表,每个元组代表一个坐标点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多