我试图创建一个视频来显示数据的动态变化,比如只是连续快速地逐个显示图像,所以我使用了图像(图像只是称为1,2,3,4,......)并编写了以下代码:
import cv2
import numpy as np
img=[]
for i in range(0,5):
img.append(cv2.imread(str(i)+'.png'))
height,width,layers=img[1].shape
video=cv2.VideoWriter('video.avi',-1,1,(width,height))
for j in range(0,5):
video.write(img)
cv2.destroyAllWindows()
video.release()
Run Code Online (Sandbox Code Playgroud)
并引发了一个错误:
TypeError: image is not a numpy array, neither a scalar
Run Code Online (Sandbox Code Playgroud)
我想我以错误的方式使用了这个列表,但我不确定.那我哪里做错了?
Vác*_*hár 10
您正在编写整个框架阵列.尝试逐帧保存:
...
for j in range(0,5):
video.write(img[j])
...
Run Code Online (Sandbox Code Playgroud)
您可以读取帧并将它们循环写入视频。以下是您的代码,稍作修改以删除一个 for 循环。
import cv2
import numpy as np
# choose codec according to format needed
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
video = cv2.VideoWriter('video.avi', fourcc, 1, (width, height))
for j in range(0,5):
img = cv2.imread(str(i) + '.png')
video.write(img)
cv2.destroyAllWindows()
video.release()
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用 skvideo 库来创建视频形式的图像序列。
import numpy as np
import skvideo.io
out_video = np.empty([5, height, width, 3], dtype = np.uint8)
out_video = out_video.astype(np.uint8)
for i in range(5):
img = cv2.imread(str(i) + '.png')
out_video[i] = img
# Writes the the output image sequences in a video file
skvideo.io.vwrite("video.mp4", out_video)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14227 次 |
最近记录: |