使用Python组合所有视频的特征

2023-11-29

假设我有 20 个视频。它们具有相同的场景、尺寸和来自同一台相机。让我们假设这二十个视频中的一个有一个人走过。所有其他视频大多相同(除了微小的自然变化,例如风吹树叶等)。

我正在寻找一种将所有 20 个视频合并为 1 个视频的好方法。我所说的合并是指“覆盖”。每个视频的所有帧都相互重叠,但以一种显示“差异”的方式。我想不出什么好办法。 这是我到目前为止所拥有的:(代码简化)。

基本上,我循环播放 20 个视频,将每个视频与下一个视频混合,并将新创建的混合视频与下一个视频一起使用,依此类推。

但是,因为我正在使用cv2.addWeighted,有人走过的视频几乎消失(在 50% 的情况下叠加 20 次后)。如何创建保持“显着像素差异”的叠加视频?我不知道哪个视频是不同的,这毫无意义 - 所以我无法创建蒙版。鉴于大多数视频大多相似,应该有某种方法来保留显着不同的帧的特征。

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 分钟的车道视频,看看是否有任何“变化”。


Thanks to the hint from @Stephen Meschke, I got it working and realized it's pretty good once you do it correctly its not really a good approach to do what I wanted to do. The difference between "background" and "foreground" isn't really good.

无论如何,这是我的代码。如果有人发现改进方法,请告诉我:

“frame”是新视频中的帧。 “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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Python组合所有视频的特征 的相关文章

随机推荐

  • 从一行中选择前 n 个元素并取其平均值

    我有一个代表资产回报的数据 我想从每行中选择前 N 个资产并计算所选资产的平均回报率 详细来说 我想创建一个函数 它可以从一行中选择不同的元素 并对这些元素进行平均 就像从第一行开始 我想根据排名选择前 3 个元素并计算它们的平均值 从第二
  • 如何使用 Font Awesome 的数据属性?

    我想转换一个rel内容到 Font Awesome CSS 图标中 这样我就不必为一个简单的菜单编写 20 行 也许一些代码会让它更容易理解 我尝试这样做 a before content attr rel font family Font
  • kendo UI网格弹出编辑器模板验证未选取模型验证规则

    当您在未使用模板的网格中单击 编辑 时 您为 schema Model 定义的验证规则将得到正确应用 但如果您使用自定义模板 则不会应用 schema Model 验证规则 我怀疑答案是因为我使用自定义弹出编辑模板以便我可以有一个下拉列表
  • 交换链表的相邻元素

    下面是我的代码 用于递归交换链表的相邻元素 交换后我失去了指向每个第二个元素的指针 输入是 1 gt 2 gt 3 gt 4 gt 5 gt 6 gt 7 我期望输出 2 gt 1 gt 4 gt 3 gt 6 gt 5 gt 7 但我的输
  • 如何在 Flutter 中保持每 5 秒更换一张图像?

    状态变量 var moviePhotos http www kiwithebeauty com wp content uploads 2017 11 BLACK PANTHER COLLAGE KIWI THE BEAUTY MOVIE M
  • 导入 google play 服务后 Cordova 构建问题

    在admob SDK新更新后 现在我们需要将google play服务项目导入到我们的项目中 以在我们的应用程序中获利并展示广告 我正在使用 Apache Cordova Phonegap 创建一个应用程序 并用它创建了 android 项
  • 为什么同一层上的文本会重叠 - 即使它具有不透明的背景?

    我知道我可以通过使用相对 绝对定位创建新的堆叠上下文来将元素堆叠在单独的层中 Demo 或不透明度 Demo 然而 我的印象是 默认情况下 html 中更靠下的元素将绘制在前面的元素之上 显然 元素的背景是如此 但我只是注意到文本的工作方式
  • 执行脚本IntrinsicYuvToRgb

    我想将Yuv中的byte 转换为Rgb中的byte ScriptIntrinsic ScriptIntrinsicYuvToRgb 应该执行此操作 基于此example 这是我现在拥有的一些代码 byte imageData gathery
  • 仅当选择 ListViewItem 时显示内容

    我有一个ListBox当其中之一ListBoxItems被选中我想更改按钮 查看 的可见性并显示它 这意味着默认状态是隐藏 这是否可能 如果可以 我是否使用 XAML 中的触发器或后面的代码来解决此问题 XAML 片段
  • 如何检查文件锁定? [复制]

    这个问题在这里已经有答案了 有没有办法在不使用 try catch 块的情况下检查文件是否被锁定 现在 我知道的唯一方法就是打开文件并捕获任何System IO IOException 当我遇到类似的问题时 我完成了以下代码 public
  • “while”和“for”循环的范围是什么?

    a的范围是什么while and for loop 例如 如果我在循环中声明了一个对象 它的行为是什么以及为什么 在以下示例中 循环的每次迭代都会销毁并重新创建所有变量 除了i 它在循环迭代之间持续存在 并且可用于 for 循环中的条件表达
  • Unity 5执行一段代码后无响应

    我绝对是 Unity 的初学者 我一直在开发一个用户界面 它是一个简单的登录表单 其中我有两个Toggle用于选择性别 即男性或女性 我一直在做的是调用一个方法来检查是否已经选择了男性 当按下另一个开关时 它将删除男性的检查 My Unit
  • 有什么方法可以使 {% extends '...' %} 有条件吗? - 姜戈

    我想在 AJAX 和常规 HTTP 调用之间共享一个模板 唯一的区别是一个模板需要与base htmlhtml 另一个没有 任何想法 其他答案要求您传递额外的上下文变量 但只要可以访问请求对象 就没有必要 extends request i
  • 从左到右显示 ImageView 的动画[重复]

    这个问题在这里已经有答案了 可能的重复 动画 ImageView 宽度而不缩放 我想做的是创建一个动画 其中 ImageView 从左到右显示 剪辑动画 图像不应缩放 我尝试更改scaleType 然后将ScaleAnimation直接应用
  • 堆叠条形图,每个堆叠独立的填充顺序

    我面临着一种行为ggplot2 排序和堆积条形图我无法理解 我读过一些关于它的问题 here here等等 但不幸的是我找不到适合我的解决方案 也许答案很简单 但我看不到 希望这不是一个骗子 我的主要目标是根据排序列 此处称为orderin
  • java数学计算给定半径1.00的圆的坐标

    在我的一项作业中 我被要求编写一个程序来计算半径为 1 0 的圆上的点的 x y 坐标 以 0 1 为增量显示范围从 1 00 到负 1 00 的所有 x 值的 y 值输出 并使用以下命令整齐地显示输出printf 其中所有 x 值都垂直对
  • 如何直接进入函数而不进入参数的中间函数?

    在 Visual Studio 2013 或任何版本 中 我正在调试 C 项目 我希望能够绕过单步执行由于参数传递到感兴趣的函数而被调用的中间函数 我怎样才能绕过进入这些中间函数 不直接感兴趣 并直接进入我感兴趣的函数 例如 假设我有一个函
  • 如何在freemarker中自定义数字格式?

    我正在使用 freemarker 并尝试以这种格式显示数字 3 343 434 00例如 这很容易通过使用来解决 total string currency 假设 总数 是某个数字 但是 当我有负数时 它会像这样显示 343 34 而不是这
  • 比较 R 中的 svd 和 princomp

    我想要得到singular values of a matrix in R获取主成分 然后也使用 princomp x 来比较结果 我知道 princomp 会给出主要成分 Question 如何从 d u 和 v 中获取主成分 解决方案s
  • 使用Python组合所有视频的特征

    假设我有 20 个视频 它们具有相同的场景 尺寸和来自同一台相机 让我们假设这二十个视频中的一个有一个人走过 所有其他视频大多相同 除了微小的自然变化 例如风吹树叶等 我正在寻找一种将所有 20 个视频合并为 1 个视频的好方法 我所说的合