我正在研究一种图像搜索算法,该算法可以找到某些颜色的某些形状;为了节省时间,我仅将形状周长的一半记录为两组不同的形状,一组用于该行,另一组用于该列使用的列。这样的想法是,每当找到具有目标颜色的点时,便会检查该点的行和列是否在主集中(具有先前的两个集中);如果是,则跳过它;否则,我将初始化2个递归函数,以记录形状的第一行和第一列。
因为它是用于学校项目的,所以我的图像是专门定制的
,代码为
for y in range(height):
for x in range(width):
if img[y][x] == target:
if y in master_set and x in master_set:
continue
else:
row = set()
column = set()
flood_fillv2_y(img,x,y,target,column)
flood_fillv2_x(img,x,y,target,row)
row=frozenset(row)
column=frozenset(column)
master_set.add(row)
master_set.add(column)
然后的想法是检查master_set
的len来查看我有多少个形状,但是正如我说的,我知道y和x从来不在主集中,因此它会为所有对象继续这样做点的形状,导致数字错误。
答案 0 :(得分:0)
不看完整的代码很难给出一个好的答案,但是我可以给出一个猜测:
master_set.add(row)
实际上将冻结集row
添加到master_set
,但是您可能希望将集合中的所有元素添加到master_set
。看一下update()
的集合方法。
有帮助吗?