我有一个从图像中取出exif数据的脚本,并将其放入列表中,我对我的列表进行排序,这就是我的列表,第一个位置是以秒为单位的图像时间,第二个位置是图像路径,这是我的列表,
[32372,'F:\rubish\VOL1\cam\G0013025.JPG',32373,'F:\rubish\VOL1\cam\G0013026.JPG',32373,'F:\rubish\VOL1\cam\G0013027.JPG',....等等等等
这是一个由@blhsing制作的对我的图像进行分组的脚本,效果很好,但我想开始分组,而不是从第一张图像开始,通过脚本的给定位置开始分组:
groups = []
for r in img:
if groups and r[0] - groups[-1][-1][0] <= 5:
groups[-1].append(r)
else:
groups.append([r])
for g in groups:
print(g[0][1], g[0][0], g[-1][0], g[-1][1])
和我所拥有的,它不好用,它只有一个图像,没有创建一个群,有人能帮我修复它吗??
groups = []
print(iii, "iii")
#print(min_list, " my min list ")
img.sort()
cnt = 0
mili = [32372, 34880]
for n in min_list:
#print(n, "mili")
for i in img:
#print(i[0])
if n == i[0]:
if groups and i[0] - groups[-1][-1][0] <= 5:
groups[-1].append(i)
else:
groups.append([i])
for ii in groups:
print(ii[0][1], ii[0][0], ii[-1][0], ii[-1][1])
在这里,我有我的2个位置的min_list意味着我只想创建2个组,分类器只从这2个位置开始的图像,间隔像以前的5秒。
发布于 2018-07-12 19:40:29
由于您的img
列表已经按时间排序,如果与最后一个条目的时间差不超过5秒,则可以迭代这些记录并将它们附加到输出列表的最后一个子列表(在我的示例代码中名为groups
);否则,将记录放入输出列表的一个新的子列表中。请记住,在Python中,-1
的下标表示列表中的最后一项。
groups = []
for r in img:
if groups and r[0] - groups[-1][-1][0] <= 5:
groups[-1].append(r)
else:
groups.append([r])
for g in groups:
print(g[0][1], g[0][0], g[-1][0], g[-1][1])
发布于 2018-07-12 19:34:15
好的!前几天我还写了同样的算法,不过是为JavaScript写的。易于移植到Python...
import pprint
def group_seq(data, predicate):
groups = []
current_group = None
for datum in data:
if current_group:
if not predicate(current_group[-1], datum): # Abandon the group
current_group = None
if not current_group: # Need to start a new group
current_group = []
groups.append(current_group)
current_group.append(datum)
return groups
data = [
[32372, r'F:\rubish\VOL1\cam\G0013025.JPG'],
[32373, r'F:\rubish\VOL1\cam\G0013026.JPG'],
[32373, r'F:\rubish\VOL1\cam\G0013027.JPG'],
[32380, r'F:\rubish\VOL1\cam\G0064646.JPG'],
[32381, r'F:\rubish\VOL1\cam\G0064646.JPG'],
]
groups = group_seq(
data=data,
predicate=lambda a, b: abs(a[0] - b[0]) > 5,
)
pprint.pprint(groups)
输出
[[[32372, 'F:\\rubish\\VOL1\\cam\\G0013025.JPG'],
[32373, 'F:\\rubish\\VOL1\\cam\\G0013026.JPG'],
[32373, 'F:\\rubish\\VOL1\\cam\\G0013027.JPG']],
[[32380, 'F:\\rubish\\VOL1\\cam\\G0064646.JPG'],
[32381, 'F:\\rubish\\VOL1\\cam\\G0064646.JPG']]]
基本上,predicate
是一个函数,如果b
与a
属于同一组,则该函数应返回True
;对于您的用例,我们查看元组/列表中前几项的(绝对)差异,即时间戳。
https://stackoverflow.com/questions/51304490
复制相似问题