使用Python组合所有视频的功能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Python组合所有视频的功能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3099字,纯文字阅读大概需要5分钟。
内容图文
假设我有20个视频.它们具有相同的场景,尺寸并且来自同一台摄像机.假设这20个视频中有一个有一个人在走来走去.所有其他视频几乎都是相同的(除了轻微的自然变化,例如刮风的叶子等).
我正在寻找一种将所有20个视频合并为1个视频的好方法.合并是指“叠加”.每个视频的所有帧都相互重叠,但以“差异”表示.我想不出一个好方法.
这是我到目前为止的内容:(简化代码).
基本上,我循环浏览这20个视频,并将每个视频与下一个视频混合,并使用新创建的混合视频与下一个视频,依此类推.
但是,因为我使用的是cv2.addWeighted,所以与人同行的视频几乎消失了(在20个覆盖率为50%的叠加之后).如何在保持“显着像素差异”的情况下创建覆盖视频?我不知道哪个视频是不同的,这毫无价值,因此我无法创建蒙版.鉴于大多数视频大部分都是相似的,因此应该有一些方法可以使帧的特征保持显着不同.
videos = ['1.mp4', '2.mp4' , ...., '20.mp4']
for video in videos:
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('new-blended.mp4', fourcc, orig_fps, (width,height))
vid = cv2.VideoCapture(video) # read current video file
try:
blend_vid = cv2.VideoCaptire('blended.mp4')
except:
print ('No worries, this is the first video, we will create a blend now')
blend_vid = None
while True: # read all frames, blend
succ, frame = vid.read()
succ_b = False
if blend_vid: succ_b, frame_b = blend_vid.read()
if not succ_b and not succ:
break
if succ_b:
merged_frame = cv2.addWeighted(frame, 0.5, frame_b, 0.5, 0)
else:
merged_frame = frame
out.write(merged_frame)
try:
os.remove('blended.mp4')
except:
pass # will fail the first time
os.rename ('new-blended.mp4', 'blended.mp4')
添加更多上下文:
在这种特定情况下,“背景”是一条车道.前景将是人们走进来的某些框架.我最感兴趣的是记录帧中的“差异”并保存它们.为了提供更多背景信息,我们假设有20个视频,每个5分钟.每个视频都具有相同的场景,并在100分钟内顺序记录.我希望创建一个5分钟的视频,将20个视频合并(叠加)在一起,以保留“关键差异”.目的是帮助人们快速(在5分钟内)查看100分钟的车道视频,以查看是否有任何“变化”.
解决方法:
感谢@Stephen Meschke的提示,我使它正常工作,并意识到一旦正确地执行它就很好了,这并不是实现我想做的好方法. “背景”和“前景”之间的区别并不是很好.
无论如何,这是我的代码.如果有人看到改进的方法,请告诉我:
“框架”是新视频的框架. “ frame_b”是在视频处理的每次迭代中创建的混合视频.
kernel_clean = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
kernel_fill = np.ones((20,20),np.uint8)
# get foreground objects from new frame
frame_mask = fgbg.apply(frame)
# clean noise
frame_mask = cv2.morphologyEx(frame_mask, cv2.MORPH_OPEN, kernel_clean)
# fill up foreground mask better
frame_mask = cv2.morphologyEx(frame_mask, cv2.MORPH_CLOSE, kernel_fill)
# remove grey areas, or set detectShadows=False in the extractor, which I learned later. However, removing shadows sometimes causes gaps in the primary foreground object. I found this to produce better results.
indices = frame_mask > 100
frame_mask[indices] = 255
# get only foreground images from the new frame
foreground_a = cv2.bitwise_and(frame,frame, mask=frame_mask)
# clear out parts on blended frames where forground will be added
frame_mask_inv = cv2.bitwise_not(frame_mask)
modified_frame_b = cv2.bitwise_and(frame_b, frame_b, mask=frame_mask_inv)
merged_frame = cv2.add(modified_frame_b, foreground_a)
内容总结
以上是互联网集市为您收集整理的使用Python组合所有视频的功能全部内容,希望文章能够帮你解决使用Python组合所有视频的功能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。