gpt4 book ai didi

python - 简化座标 list

转载 作者:行者123 更新时间:2023-12-02 17:29:01 25 4
gpt4 key购买 nike

我已经为cv.matchTemplate函数提供了模板图像和测试图像。

返回后,我过滤掉匹配度低于95%的所有内容。结果很好,我正在取得期望的结果。结果是一个元组列表,每个元组由(x,y)表示。问题是过滤后,我有太多结果。似乎每个潜在的匹配都会产生不只一个点:

(150, 143)
(151, 143)
(152, 143)
(153, 143)
(154, 143)
(155, 143)
(149, 144)
(150, 144)
(151, 144)
(152, 144)
(153, 144)
(154, 144)
(155, 144)
(156, 144)

(694, 144)
(695, 144)
(696, 144)
(697, 144)
(698, 144)

(148, 145)
(149, 145)
(150, 145)
(151, 145)
(152, 145)
(153, 145)
(154, 145)
(155, 145)
(156, 145)
(157, 145)

(692, 145)
(693, 145)
(694, 145)
(695, 145)
(696, 145)
(697, 145)
(698, 145)
(699, 145)

(147, 146)
(148, 146)
(149, 146)
(150, 146)
(151, 146)
(152, 146)
(153, 146)
(154, 146)
(155, 146)
(156, 146)
(157, 146)

所有这些点都是 tuples,它们位于一个单独的 list中。您可以看到,这些点可以“逻辑地”分组在一起,并且其坐标相差不大。在上面的示例输出中,有5个可区分的“组”。这里的想法是将每个 减少为 一点

从上面,这将被浓缩为以下列表:
(151,143)
(694, 144)
(148, 145)
(692, 145)
(147, 146)

有没有办法做到这一点?

最佳答案

修正了此答案,原因是关于列表中所有元组的OP注释。
如果发现要改变点之间的差异的严格程度(例如,如果希望其在5像素以内,则可以做<= 5而不是== 1),这是第一个if条件,如果可以更改,可以进行更改。

masterTest = [(1, 2), (1, 3), (2, 3), (4, 6), (4, 7), (4, 8)] #test array
arrayHolder = [] #buffer that holds the first mini list
compositeArray = [] #master list which holds a list of the tuples, grouped
lastTuple = masterTest[0] #dummy variable
arrayHolder.append(masterTest[0]) # add the first one so we have something to compare to
masterTest.pop(0) # it's already in our data, don't want a dup
for tuples in masterTest:
if (((abs(tuples[0] - lastTuple[0]) == 1 and abs(tuples[1] - lastTuple[1]) == 0)) or
(abs(tuples[1] - lastTuple[1]) == 1 and abs(tuples[0] - lastTuple[0]) == 0)):
arrayHolder.append(tuples)
else:
compositeArray.append(arrayHolder.copy()) #add buffer to master list
arrayHolder = [] #clear out the buffer
arrayHolder.append(tuples) #restart a new buffer
lastTuple = tuples # update last coordinate checked


compositeArray.append(arrayHolder) #clears the buffer one last time

pointArray = []
for lists in compositeArray:
count = 0
xavg = sum([x[0] for x in lists])/len(lists)
yavg = sum([x[1] for x in lists])/len(lists)
pointArray.append(tuple((xavg, yavg)))

print (pointArray)

如果要执行此操作,可以使用pythons round()函数(该函数很简单,即numberToRound.round())。

关于python - 简化座标 list ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57063629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com