我正在启动一个新项目,该项目将涉及拍摄两张图像并比较图像内部的点中心。原件将是一张有 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
的值,并且m
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]
希望有帮助,如果确实如此,请将其标记为一个,如果没有 - 让我知道为什么。
嗨,我不太明白你的问题是什么,但你可以使用以下代码,使用嵌套循环将图像存储在数组或 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)]
这将为您提供一个元组列表,每个元组代表一个坐标点。