我正在使用opencv和python来根据检测到运动的时间来截断输入视频。
一旦代码的运动检测部分正常工作,下一步就是找到要进行剪切的输入/输出编辑点(我使用ffmpeg)。
当只有一个运动周期时,我使用的方法效果很好:
If motion occurs:
append list with time information然后使用min(列表)和max(列表)来查找切割时间。
但是,如果存在两个或更多独立的运动周期,则此方法会失败。假设列表为2,3,4,34,35,36,编辑点为:
min(list) = 2
max(list) = 36我想要一种方法来提取连续的定时信息,在这个例子中是: 2-4和34-36。
这就是我坚持的逻辑!
当没有动作,但在while循环的每个迭代(或注册为无运动的每个帧)上创建一个新列表时,我曾尝试将新列表附加到列表列表中,其中我只想在从运动到无运动的转换中创建一个新列表。
If motion occurs:
append list with time information
else:
append list_of_list #but only once. not every iteration without motion另一种方法可能是在没有运动发生时将0添加到列表中:
If motion occurs:
append list with time information
else:
append list with 0使用前面的示例,这将提供以下结果:
0,0,2,3,4,0,0,0,0,...,0,0,0,0,0,34,35,36,0,0,0,0,0,0...
是否有一种简便的方法可以从单个列表中提取序列2-4和34-36?
我希望这是很清楚的。任何建议都将不胜感激。
谢谢
发布于 2016-04-26 00:59:49
好的,从评论来看,我认为你想要的是一个连续运动的间隔列表,例如[ [2,5], [8,12], [15,16] ]。
可以使用以下代码获得该值:
lst = [[]]
while True:
# get second
if lst[-1]:
last = lst[-1][1]
if second - last == 1:
lst[-1][1] = second
elif second - last > 1:
lst.append([second, second])
else:
lst[-1] = [second, second]https://stackoverflow.com/questions/36824897
复制相似问题