OpenCV中将图像序列转换为视频

3

我有一系列的图片,格式为*.tif,我想利用它们创建一个视频。我正在使用Python 2.7中的OpenCV 3.1.0。以下是我的代码片段:

import cv2
import numpy as np

nIMAGES = 10
files = glob.glob(DIR + '\\' + tpname +'\\*.tif' )
image_stack = np.empty((500, 220, nIMAGES))
mov = DIR + '\\' + tpname + '\\' + tpname + '_mov.avi'
MOV = cv2.VideoWriter(filename=mov, fourcc=cv2.VideoWriter_fourcc('F', 'M', 'P', '4'), fps=2, frameSize=(220, 500)) # frame size is 220 x 500

for i in np.arange(0, nIMAGES):
    print 'Working on: ' + files[i][-14:-4]
    image = cv2.imread(files[i], 0)
    crop_image = image[50:550, 252:472] #crop y:h, x:w

 # now let's create the movie:
    crop_image = cv2.applyColorMap(crop_image, cv2.COLORMAP_JET)
    MOV.write(crop_image)

MOV.release()

当我运行这段代码时,我创建了一个0 Kb的AVI文件(它没有保存任何内容)。 我认为我缺少像frame = cv2.VideoCapture.read(crop_image)这样的东西,然后我会将写入行转换为MOV.write(frame)。 但是,我得到了一个AttributeError,因为VideoCapture.read不是属性。
我正在使用这个OpenCV网页作为我的指南:http://docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html

它会打印所有的“working on…”文件吗?在C++ API中,您需要添加opencv_ffmpeg.dll才能成功写入帧。 - Micka
1
请查看https://dev59.com/7mgt5IYBdhLWcg3w8h01。对于VideoWriter也是同样的情况,因此请将opencv_ffmpeg dll添加到程序可以找到的位置! - Micka
你所有的图片大小都是(220, 500)吗?如果不是,你需要通过编程进行调整大小(使用cv2.resize),以适应录制器的设置。此外,请检查颜色/灰度是否正确设置并适合你的图片,或者通过编程转换图片。 - Micka
1
很高兴听到这个消息。但请注意,MJPEG 不是一个很好的视频编解码器,所以如果您在视频质量和视频大小方面遇到问题,您可能需要寻找不同的编解码器。 - Micka
显示剩余4条评论
1个回答

1

我需要做两个更改才能使其工作:

  1. 遵循这个问题的建议:OpenCV 2.4 VideoCapture not working on Windows,我需要将 fmpeg.dll 文件复制到我的Python目录(C:\Anaconda)。 我还需要重新命名文件夹以包含我的opencv版本(3.1.0),例如 opencv_ffmpeg310_64.dll
  2. 我需要进行的另一个更改是将编解码器更改为MJPG

非常感谢@Micka非常快速地帮助我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接