从特定位置开始按时间间隔对图像进行分组

2024-09-29 17:24:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个脚本,它从图像中提取exif数据,并将其放入一个列表中。然后我整理我的名单,这就是我所拥有的。这是一个二维数组,其中第一个元素是时间戳,第二个元素是图像路径: 我的img列表:

[[32372, 'F:\\rubish\\VOL1\\cam\\G0013025.JPG'], 
 [32373, 'F:\\rubish\\VOL1\\cam\\G0013026.JPG'], 
 [32373, 'F:\\rubish\\VOL1\\cam\\G0013027.JPG'],.... etc etc etc

以下脚本由@blhsing和groups my images制作。它工作得很好,但我想分组我的图像不是从第一个图像开始,而是从任何给定的位置开始。你知道吗

这是@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 mili:
    #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])

我的iii是一个temp列表:

[32372, 32373, 32373, 32374, 32374, 32375, 32375, 34880, 34880, 34881, 34881, 34882, 34882, 34883, 34883, 36505, 36505...etc

在本例中,我的min_list有两个位置,这意味着我只想创建两个组,并且只从这两个位置开始分类图像,间隔与之前相同,为5秒。你知道吗

附言。 谢谢@pasch013它可以工作,但是请检查一下,为什么结果是这样的,我从minu列表中得到的mili是这样的:

min_list.sort()
print(min_list, " min list")
interval = 5
groups = []
#mili = [1, 99]
for start_time in min_list:
    i = 0

    while i < len(img) and img[i][0] < start_time:
        i += 1
    groups.append([])
    while i < len(img) and img[i][0] < start_time + interval:
        groups[-1].append(img[i])
        i += 1
    for ii in groups:
        print(ii[0][1], ii[0][0], ii[-1][0], ii[-1][1])

这就是我的结果:请看这个:

32345 temps GOPR
F:\rubish\VOL1\cam\GOPR3001.JPG path + temps 32345
32357 min
35292 temps GOPR
F:\rubish\VOL1\cam1\GOPR5405.JPG path + temps 35292
35706 min
[32357, 35706]  min list
F:\rubish\VOL1\cam\G0013002.JPG 32357 32361 F:\rubish\VOL1\cam\G0013010.JPG
F:\rubish\VOL1\cam\G0013002.JPG 32357 32361 F:\rubish\VOL1\cam\G0013010.JPG
F:\rubish\VOL1\cam1\G0075992.JPG 35706 35708 F:\rubish\VOL1\cam1\G0075997.JPG

为什么我有3组而不是2组???你知道吗

现在正在正确创建第一组,但不想转到第二组,出现此错误

    Z:\GOPRO\2018-05-31\VOL0102\100GOPRO\G0013002.JPG 32357 32577 Z:\GOPRO\2018-05-31\VOL0102\100GOPRO\G0013442.JPG
  File "F:/piotrwork/detectione_voltigere/GOPR_test_zero.py", line 115, in <module>
    print(ii[0][1], ii[0][0], ii[-1][0], ii[-1][1])
IndexError: list index out of range

我的名单是

[32357, 35706]  min list

我的图像列表-img

[[32357, 'F:\\rubish\\VOL1\\cam\\G0013002.JPG'], [32357, 'F:\\rubish\\VOL1\\cam\\G0013003.JPG'], [32358, 'F:\\rubish\\VOL1\\cam\\G0013004.JPG'], [32358, 'F:\\rubish\\VOL1\\cam\\G0013005.JPG'], [32359, 'F:\\rubish\\VOL1\\cam\\G0013006.JPG'], [32359, 'F:\\rubish\\VOL1\\cam\\G0013007.JPG'], [32360, 'F:\\rubish\\VOL1\\cam\\G0013008.JPG'], [32360, 'F:\\rubish\\VOL1\\cam\\G0013009.JPG'], [32361, 'F:\\rubish\\VOL1\\cam\\G0013010.JPG'], [35706, 'F:\\rubish\\VOL1\\cam1\\G0075992.JPG'], [35706, 'F:\\rubish\\VOL1\\cam1\\G0075993.JPG'], [35707, 'F:\\rubish\\VOL1\\cam1\\G0075994.JPG'], [35707, 'F:\\rubish\\VOL1\\cam1\\G0075995.JPG'], [35708, 'F:\\rubish\\VOL1\\cam1\\G0075996.JPG'], [35708, 'F:\\rubish\\VOL1\\cam1\\G0075997.JPG'], [36687, 'F:\\rubish\\VOL1\\cam\\G0086476.JPG'],

还有我最后的指纹

    32345 temps GOPR
F:\rubish\VOL1\cam\GOPR3001.JPG path + temps 32345
32357 min
Traceback (most recent call last):
  File "F:/piotrwork/detectione_voltigere/GOPRO_test_zero_one.py", line 121, in <module>
    print(ii[0][1], ii[0][0], ii[-1][0], ii[-1][1])
IndexError: list index out of range
35292 temps GOPR
F:\rubish\VOL1\cam1\GOPR5405.JPG path + temps 35292
35706 min
[[32357, 'F:\\rubish\\VOL1\\cam\\G0013002.JPG'], [32357, 'F:\\rubish\\VOL1\\cam\\G0013003.JPG'], [32358, 'F:\\rubish\\VOL1\\cam\\G0013004.JPG'], [32358, 'F:\\rubish\\VOL1\\cam\\G0013005.JPG'], [32359, 'F:\\rubish\\VOL1\\cam\\G0013006.JPG'], [32359, 'F:\\rubish\\VOL1\\cam\\G0013007.JPG'], [32360, 'F:\\rubish\\VOL1\\cam\\G0013008.JPG'], [32360, 'F:\\rubish\\VOL1\\cam\\G0013009.JPG'], [32361, 'F:\\rubish\\VOL1\\cam\\G0013010.JPG'], [35706, 'F:\\rubish\\VOL1\\cam1\\G0075992.JPG'], [35706, 'F:\\rubish\\VOL1\\cam1\\G0075993.JPG'], [35707, 'F:\\rubish\\VOL1\\cam1\\G0075994.JPG'], [35707, 'F:\\rubish\\VOL1\\cam1\\G0075995.JPG'], [35708, 'F:\\rubish\\VOL1\\cam1\\G0075996.JPG'], [35708, 'F:\\rubish\\VOL1\\cam1\\G0075997.JPG'], [36687, 'F:\\rubish\\VOL1\\cam\\G0086476.JPG'], [36688, 'F:\\rubish\\VOL1\\cam\\G0086477.JPG'], [36688, 'F:\\rubish\\VOL1\\cam\\G0086478.JPG'], [36689, 'F:\\rubish\\VOL1\\cam\\G0086479.JPG'], [36689, 'F:\\rubish\\VOL1\\cam\\G0086480.JPG'], [36690, 'F:\\rubish\\VOL1\\cam1\\G0086481.JPG'], [36690, 'F:\\rubish\\VOL1\\cam1\\G0086482.JPG'], [36691, 'F:\\rubish\\VOL1\\cam1\\G0086483.JPG']]
[32357, 35706]  min list
32357
[[[32357, 'F:\\rubish\\VOL1\\cam\\G0013002.JPG'], [32357, 'F:\\rubish\\VOL1\\cam\\G0013003.JPG'], [32358, 'F:\\rubish\\VOL1\\cam\\G0013004.JPG'], [32358, 'F:\\rubish\\VOL1\\cam\\G0013005.JPG'], [32359, 'F:\\rubish\\VOL1\\cam\\G0013006.JPG'], [32359, 'F:\\rubish\\VOL1\\cam\\G0013007.JPG'], [32360, 'F:\\rubish\\VOL1\\cam\\G0013008.JPG'], [32360, 'F:\\rubish\\VOL1\\cam\\G0013009.JPG'], [32361, 'F:\\rubish\\VOL1\\cam\\G0013010.JPG']]] grrrr
35706
[[[32357, 'F:\\rubish\\VOL1\\cam\\G0013002.JPG'], [32357, 'F:\\rubish\\VOL1\\cam\\G0013003.JPG'], [32358, 'F:\\rubish\\VOL1\\cam\\G0013004.JPG'], [32358, 'F:\\rubish\\VOL1\\cam\\G0013005.JPG'], [32359, 'F:\\rubish\\VOL1\\cam\\G0013006.JPG'], [32359, 'F:\\rubish\\VOL1\\cam\\G0013007.JPG'], [32360, 'F:\\rubish\\VOL1\\cam\\G0013008.JPG'], [32360, 'F:\\rubish\\VOL1\\cam\\G0013009.JPG'], [32361, 'F:\\rubish\\VOL1\\cam\\G0013010.JPG']], []] grrrr
F:\rubish\VOL1\cam\G0013002.JPG 32357 32361 F:\rubish\VOL1\cam\G0013010.JPG

进程已完成,退出代码为1


Tags: in图像imgminlistiigroupsjpg
1条回答
网友
1楼 · 发布于 2024-09-29 17:24:45

试试看:

group_time = 5
groups = []
mili = [1, 99]
for start_time in mili:
    i = 0

    while i < len(img) and img[i][0] < start_time:
        i += 1
    groups.append([])
    while i < len(img) and img[i][0] < start_time + group_time:
        groups[-1].append(img[i])
        i += 1

print(groups)

其中mili是开始时间的列表,group_time是间隔的大小。你知道吗

编辑

关于你的编辑:你的最后两行

for ii in groups:
    print(ii[0][1], ii[0][0], ii[-1][0], ii[-1][1])

在内部for循环中,而我认为你只想打印一次。只需取消它们,它就可以按您的需要工作:

min_list.sort()
print(min_list, " min list")
interval = 5
groups = []
#mili = [1, 99]
for start_time in min_list:
    i = 0

    while i < len(img) and img[i][0] < start_time:
        i += 1
    groups.append([])
    while i < len(img) and img[i][0] < start_time + interval:
        groups[-1].append(img[i])
        i += 1
for ii in groups:
    print(ii[0][1], ii[0][0], ii[-1][0], ii[-1][1])

编辑2

如果您希望分组,以便与最后一个图像相差不超过5秒的所有图像都在同一组中,则必须用第二个while循环中前一个图像的时间替换start_time。就像这样:

min_list.sort()
print(min_list, " min list")
interval = 5
groups = []
#mili = [1, 99]
for start_time in min_list:
    i = 0

    while i < len(img) and img[i][0] < start_time:
        i += 1
    groups.append([])
    while i < len(img) and img[i][0] < img[i-1][0] + interval or img[i][0] < start_time + interval:
        groups[-1].append(img[i])
        i += 1
for ii in groups:
    print(ii[0][1], ii[0][0], ii[-1][0], ii[-1][1])

相关问题 更多 >

    热门问题