如何在 python 中将坐标存储到数组中?



我正在启动一个新项目,该项目将涉及拍摄两张图像并比较图像内部的点中心。原件将是一张有 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

更新:

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

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]

这是 2D 数组的直接方法:

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)

对于第二个,您可以访问n的值,并且marr[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]

希望有帮助,如果确实如此,请将其标记为一个,如果没有 - 让我知道为什么。

嗨,我不太明白你的问题是什么,但你可以使用以下代码,使用嵌套循环将图像存储在数组或 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

您可以使用简单的列表理解来完成您的任务

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

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

最新更新