【问题标题】:How to generate a video with python, matplotlib and opencv?如何使用 python、matplotlib 和 opencv 生成视频?
【发布时间】:2021-05-09 01:16:28
【问题描述】:

这是我现在拥有的。

导入的库:

from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
import numpy as np
import cv2
import time

例如(这部分代码来自互联网示例),我画了一个带有“文本”的图。

fig = plt.figure(figsize=(6,6.5))
canvas = FigureCanvas(fig)
ax = fig.gca()
ax.text(0.0,0.0,"Test", fontsize=45)
ax.axis('off')

然后,我将它保存到“1.png”。

plt.savefig("1.png")

最后,我创建了一个视频编写器并将 png 写入视频。

size = (600,650)
fps = 2
fourcc = cv2.VideoWriter_fourcc('I', '4', '2', '0')
video = cv2.VideoWriter("1.avi", fourcc, fps, size)
image = cv2.imread('1.png')
video.write(image)
video.release()

问题来了:我需要保存图片,然后将其读取为opencv可以读取的numpy数组,有什么方法可以直接将fig对象转换为image对象(numpy数组) ?

非常感谢你们!

【问题讨论】:

标签: python opencv matplotlib cv2 opencv-python


【解决方案1】:

让我们一步一步分析:

  1. size = (600,650)
    

图片大小是600, 650吗?

如果我是你,我会初始化为

image = cv2.imread('1.png')
(height, width) = image.shape[:2]
size = (width, height)

或者如果您希望输出为(600, 650),则调整图像大小:

image = cv2.imread('1.png')
image = cv2.resize(image, (600, 650))
  1. fps = 2
    

为什么?您将每秒帧数设置为 2,为什么不设置为 10?、15? source

  1. fourcc = cv2.VideoWriter_fourcc('I', '4', '2', '0')
    

为什么是I420?你要创建.avi文件,然后设置为MJPGsource

如果我是你,我会初始化为:

fourcc = cv2.VideoWriter_fourcc(*'MJPG')
  1. video = cv2.VideoWriter("1.avi", fourcc, fps, size)
    

您使用的是什么类型的图像?颜色,灰色?需要在VideoWriter中初始化为参数

对于彩色图像:

video = cv2.VideoWriter("1.avi", fourcc, fps, size, isColor=True)

对于灰色图像:

video = cv2.VideoWriter("1.avi", fourcc, fps, size, isColor=False)

示例代码:


import cv2

img = cv2.imread("1.png")
(h, w) = img.shape[:2]
size = (w, h)
fps = 20
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
video = cv2.VideoWriter("1.avi", fourcc, fps, size, isColor=True)
video.write(img)
video.release()

还知道cv2.imreadBGR 方式读取图像。如果您希望您的图像为RGB,您需要将其转换为:

image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 2020-11-02
    • 2017-05-17
    • 1970-01-01
    • 2012-11-25
    • 2015-05-10
    • 2013-09-28
    • 2020-11-21
    相关资源
    最近更新 更多