使用 python 将一系列 ppm 图像转换为视频



我正在尝试使用IPython(python 2.7(用ppm图像制作视频。

我写了这段代码:

import cv2
import glob
img1 = cv2.imread('C:/Users/Joseph/image0.ppm')
height, width, layers = img1.shape
video1 = cv2.VideoWriter('video1.avi', -1, 1, (width, height))
filenames = glob.glob('C:/Users/Joseph/*.ppm')
for filename in filenames:
print(filename)
img = cv2.imread(filename)
video1.write(img)
cv2.destroyAllWindows()
video1.release()

视频已创建,但size=0B为空,无法打开。

没有错误消息。

我怀疑问题是位置的写入,因为print(filename)产生:

C:/Users/Joseph\image0.ppm

C:/Users/Joseph\image1.ppm

C:/Users/Joseph\image2.ppm

C:/Users/Joseph\image2.ppm

而不是我所期望的:C:/Users/Joseph/image0.ppm

你能帮我吗?

编辑:文件类型为type: GIMP 2.10.14 (.ppm)。问题可能与这种类型的ppm有关吗?

编辑2:问题似乎与.ppm没有直接相关。

确实,我尝试过(考虑到Rotem的答案(:

import cv2
import glob
i = cv2.imread('C:/Users/Joseph/image0.ppm')
cv2.imwrite('C:/Users/Joseph/image.jpg',i)

img1 = cv2.imread('C:/Users/Joseph/image.jpg')
height, width, layers = img1.shape
# Set FOURCC code to '24BG' - '24BG' is used for creating uncompressed raw video
video1 = cv2.VideoWriter('video1.avi', cv2.VideoWriter_fourcc('D','I','B',' '), 1, (width, height))
filenames = glob.glob('C:/Users/Joseph/*.ppm')
try:
for filename in filenames:
print(filename)
img = cv2.imread(filename)
cv2.imwrite('C:/Users/Joseph/a.jpg',img)
img=cv2.imread('C:/Users/Joseph/a.jpg')
# Display input image for debugging
cv2.imshow('img', img)
cv2.waitKey(1000)
video1.write(img)
except:
print('An error occurred.')
cv2.destroyAllWindows()
video1.release()

而且它也不起作用。而且我没有显示任何图像。

所以这似乎是我的视频简历中的错误。jpg创建得很好。

编辑:解决方案。

本着 rotem 答案的精神,我尝试了:cv2.VideoWriter_fourcc('M','J','P','G')它奏效了!

获取空视频文件的原因有多种,但路径看起来正确。

在Windows系统中,C:/Users/Josephimage0.ppmC:/Users/Joseph/image0.ppm是相同的。

  • 手动删除video1.avi文件,只是为了确保文件未被锁定。

我认为问题涉及视频编解码器,但我不确定。

在命令video1 = cv2.VideoWriter('video1.avi', -1, 1, (width, height))中,第二个参数是 FOURCC 代码,用于选择视频编码器的视频编解码器。
将值设置为-1时,将打开一个对话框,供您选择编解码器。
在旧版本的OpenCV中,它并不总是有效。

尝试将 FOURCC 设置为'DIB ',应用"基本 Windows 位图格式"。
使用它来创建原始(未压缩(AVI视频文件。

这是代码:

import cv2
import glob
img1 = cv2.imread('C:/Users/Joseph/image0.ppm')
height, width, layers = img1.shape
# Set FOURCC code to '24BG' - '24BG' is used for creating uncompressed raw video
video1 = cv2.VideoWriter('video1.avi', cv2.VideoWriter_fourcc('D','I','B',' '), 1, (width, height))
filenames = glob.glob('*.ppm')
try:
for filename in filenames:
print(filename)
img = cv2.imread(filename)
# Display input image for debugging
cv2.imshow('img', img)
cv2.waitKey(1000)
video1.write(img)
except:
print('An error occurred.')
cv2.destroyAllWindows()
video1.release()
  • 我添加了cv2.imshow('img', img)来帮助您调试问题,以防它不是编解码器问题。
  • 确保您没有收到任何异常。

如果我的回答解决了你的问题,请让我不。

相关内容

  • 没有找到相关文章

最新更新