在Mac上使用opencv在Python中使用图像制作视频

问题描述

我在名为jupyter的jpg格式文件夹中有一些图形,我想将它们放在一起以制作视频,但是当我运行代码时,它不会保存并显示视频。

import cv2
import os
from os.path import isfile,join
def convert_pictures_to_video(pathIn,pathOut,fps,time):
    frame_array=[]
    files= [f for f in os.listdir(pathIn) if isfile(join(pathIn,f))]
    for i in range (len(files)):
        filename=pathIn+files[i]
        img=cv2.imread(filename)
        height,width,layers=img.shape
        size=(width,height)
        for k in range (time):
        frame_array.append(img)
out=cv2.VideoWriter(pathOut,cv2.VideoWriter_fourcc(*'mp4v'),size)

    for i in range(len(frame_array)):
        out.write(frame_array[i])
    cv2.destroyAllWindows()
    out.release()

pathIn='/Users/jupyter/'
pathOut='/Users/jupyter/video.avi'
fps=1
time=20
convert_pictures_to_video(pathIn,time

解决方法

    1. 您要根据图像创建一个.avi文件。因此,您应该将fourcc初始化为MJPG
    • fourcc = cv2.VideoWriter_fourcc('M','J','P','G') 
      
    • 要创建mp4v文件时应使用.mp4

      • fourcc = cv2.VideoWriter_fourcc('m','p','4','v') 
        
    1. 所有图片的大小和VideoWriter的大小必须相同。

      例如:我所有的图像尺寸均为(300,167)。因此:

      • out = cv2.VideoWriter('video.avi',fourcc,25,(300,167),isColor=True)
        
      • 因为要创建彩色图像,所以将isColor变量设置为true

    1. 我更喜欢glob来收集所有图像:

      • for img in sorted(glob.glob("ball_tracking/*.png")):
            img = cv2.imread(img)
            img = cv2.resize(img,167))
            out.write(img)
        

代码:


import cv2
import glob

fourcc = cv2.VideoWriter_fourcc('M','G')

out = cv2.VideoWriter('video.avi',isColor=True)

for img in sorted(glob.glob("ball_tracking/*.png")):
    img = cv2.imread(img)
    img = cv2.resize(img,167))
    out.write(img)

out.release()

更新


  • 如果质量真的很差,您可以做两件事。要降低视频速度,您可以降低帧速率。

      1. .avi更改为.mp4
      • fourcc = cv2.VideoWriter_fourcc('m','v') 
        
      1. 您可以更改image size。例如,如果您所有图像的大小都相同。然后获取第一张图片的高度和宽度,并将其设置为视频的大小。
      •  (h,w) = cv2.imread(glob("<your-path-here>*.png")[0]).shape[:2]
        
      • 如果图像不相同,您仍然可以使用上面的代码,但是质量可能无法提高。

      1. 您可以降低帧速率以降低视频播放速度。例如:25到2。
      • out = cv2.VideoWriter('video.avi',2,(w,h),isColor=True)
        

更新代码:


import cv2
import glob

fourcc = cv2.VideoWriter_fourcc('M','V')
(h,w) = cv2.imread(glob("<your-path-here>*.png")[0]).shape[:2]

out = cv2.VideoWriter('video.mp4',isColor=True)

for img in sorted(glob.glob("<your-path-here>*.png")):
    img = cv2.imread(img)
    img = cv2.resize(img,h))
    out.write(img)

out.release()

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...