用图像替换帧中检测到的对象。(图像处理)
Replacing detected object in a frame with an image.(imageProcessing)
概览:
我正在做一个视频创作项目。我使用的技术有:imageMagick, php, ffmpeg.
当前状态:
目前该项目能够使用图像和文本以及一些基本的过渡来创建视频。我这样做的方法是使用 imagemagick 使用输入图像(其中有过渡效果)创建 gif,然后将所有 gif 转换为视频,最后将视频连接在一起。
下一步(我的问题):
我现在准备把它提升到一个新的水平。所以,我所拥有的是一个视频(1920x1080),其中有一些白色帧(1280x720)在每一帧中不断移动。我想用我希望使用的一些图像 (1280x720) 替换出现在视频某些帧中的那些白帧。请看这里的图片,你会得到一个想法:这些只是我视频中的两帧。如果你仔细看,图像在移动(白色 space 不是恒定的)。
期望:
所以,我想用我自己的图像填充那些白色 space。如果这种情况只有一帧,我可以使用 ffmpeg 在确切的宽度和高度上叠加图像。但是这里白色的space不是固定的,在所有的帧中一直在移动,而且有很多帧。因此,我正在寻找类似 opencv 或其他一些技术,可用于视频或一组帧中的对象检测,并用其他图像替换检测到的区域。
我只需要踢一下。所以,如果有人已经在做这样的事情,请告诉我我可以使用什么技术。提前致谢。
这完全取决于您的假设:
如果您可以安全地假设您的矩形边界永远不会以某种方式被遮挡(隐藏),您可以尝试在图像中找到边缘(如 OpenCV 的 Canny 边缘),然后寻找矩形形状(形成扭曲矩形的角,或非常流行的霍夫线)。
如果您要查找的矩形始终是白色,您可以在像 HSV 这样的色彩空间中对图像进行阈值处理以寻找最大值(HSV 中的 V ~ 亮度),然后在二值图像中搜索矩形形状。
如果你的角落有时被遮挡,你将不得不对你的图像做一些调整,比如形态学操作("grow and contract" 二值阈值图像),然后霍夫线可以做到这一点。
请注意,此答案假设一旦您知道矩形的位置,"you're done",您只需用自定义内容覆盖该矩形。
我也不检查任何时间连续性:您的视频帧可能会根据矩形的逐帧外观跳来跳去。你必须包括一些关于以前职位的知识。
概览:
我正在做一个视频创作项目。我使用的技术有:imageMagick, php, ffmpeg.
当前状态:
目前该项目能够使用图像和文本以及一些基本的过渡来创建视频。我这样做的方法是使用 imagemagick 使用输入图像(其中有过渡效果)创建 gif,然后将所有 gif 转换为视频,最后将视频连接在一起。
下一步(我的问题):
我现在准备把它提升到一个新的水平。所以,我所拥有的是一个视频(1920x1080),其中有一些白色帧(1280x720)在每一帧中不断移动。我想用我希望使用的一些图像 (1280x720) 替换出现在视频某些帧中的那些白帧。请看这里的图片,你会得到一个想法:这些只是我视频中的两帧。如果你仔细看,图像在移动(白色 space 不是恒定的)。
期望:
所以,我想用我自己的图像填充那些白色 space。如果这种情况只有一帧,我可以使用 ffmpeg 在确切的宽度和高度上叠加图像。但是这里白色的space不是固定的,在所有的帧中一直在移动,而且有很多帧。因此,我正在寻找类似 opencv 或其他一些技术,可用于视频或一组帧中的对象检测,并用其他图像替换检测到的区域。
我只需要踢一下。所以,如果有人已经在做这样的事情,请告诉我我可以使用什么技术。提前致谢。
这完全取决于您的假设:
如果您可以安全地假设您的矩形边界永远不会以某种方式被遮挡(隐藏),您可以尝试在图像中找到边缘(如 OpenCV 的 Canny 边缘),然后寻找矩形形状(形成扭曲矩形的角,或非常流行的霍夫线)。
如果您要查找的矩形始终是白色,您可以在像 HSV 这样的色彩空间中对图像进行阈值处理以寻找最大值(HSV 中的 V ~ 亮度),然后在二值图像中搜索矩形形状。
如果你的角落有时被遮挡,你将不得不对你的图像做一些调整,比如形态学操作("grow and contract" 二值阈值图像),然后霍夫线可以做到这一点。
请注意,此答案假设一旦您知道矩形的位置,"you're done",您只需用自定义内容覆盖该矩形。 我也不检查任何时间连续性:您的视频帧可能会根据矩形的逐帧外观跳来跳去。你必须包括一些关于以前职位的知识。