首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用OpenCV (Python)将2张图片写入视频,时长为10秒

使用OpenCV (Python)将2张图片写入视频,时长为10秒
EN

Stack Overflow用户
提问于 2019-06-08 23:05:06
回答 2查看 2K关注 0票数 2

我正在尝试拍摄本地文件夹中的两张图像,并使用OpenCV的Videowriter函数从这些图像创建视频。我使用的FrameRate为1,所以这将创建一个时长为2秒的视频。下面是代码(我是从here得到的):

代码语言:javascript
复制
import cv2
import os

image_folder = 'images'
video_name = 'video.avi'

images = [img for img in os.listdir(image_folder) if img.endswith(".png")]
frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape

video = cv2.VideoWriter(video_name, 0, 1, (width,height))

for image in images:
    video.write(cv2.imread(os.path.join(image_folder, image)))

cv2.destroyAllWindows()
video.release()

目标:我想创建一个10秒的视频,这将有这2个图像,每个显示5秒。

我想在论坛上可能也有类似的问题,但我找不到。如果有人能给我指出解决方案,那就太好了。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-09 03:18:53

下面的代码片段应该可以解决您的问题。请注意,您必须指定each_image_duration。我使用这个变量在特定的持续时间内写入视频中的每个图像。在此用例中,您必须将fps保留为1.0,以便为1.0 sec显示每个视频帧。这就是cv2.Videowriter中的第三个参数。

代码语言:javascript
复制
import cv2
import os

image_folder = 'images'
video_name = 'video.avi'
each_image_duration = 5 # in secs
fourcc = cv2.VideoWriter_fourcc(*'XVID') # define the video codec

images = [img for img in os.listdir(image_folder) if img.endswith(".png")]
frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape

video = cv2.VideoWriter(video_name, fourcc, 1.0, (width, height))

for image in images:
    for _ in range(each_image_duration):
        video.write(cv2.imread(os.path.join(image_folder, image)))

cv2.destroyAllWindows()
video.release()
票数 4
EN

Stack Overflow用户

发布于 2020-12-24 20:09:19

在这里,你可以根据你有多少帧和你想要制作多少秒的视频来动态计算fps。

请看下面的代码:

代码语言:javascript
复制
import cv2
import os

image_folder = 'images'
video_name = 'video.avi'

fourcc = cv2.VideoWriter_fourcc(*'XVID') # define the video codec

images = [img for img in os.listdir(image_folder) if img.endswith(".png")]
img_count = len(images)
video_secs = 10
frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape

video = cv2.VideoWriter(video_name, fourcc, float(img_count/video_secs), (width, height))

for image in images:
    video.write(image)

cv2.destroyAllWindows()
video.release()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56507536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档