我有一个使用OpenCV 2.4.7(在Mac OS Mavericks中使用gcc 4.7.2编译)的简单应用程序,可以从一组图像中创建视频:
std::vector<std::string> filenames = ...; // image filenames
const int FPS = 25;
const cv::Size SZ(640, 896);
cv::VideoWriter video;
video.open("video.avi", CV_FOURCC('m', 'p', '4', 'v'), FPS, SZ, true);
if(video.isOpened())
{
for(size_t i = 0; i < filenames.size(); ++i)
{
cv::Mat im = cv::imread(filenames[i], 1);
if(!im.empty()) video << im;
}
}
我正在分析命令video << im
,我看到随着视频中帧数的增加,它需要越来越长的时间。开始时,每个图像的添加时间不到5毫秒。在1万张图像之后,每张图像需要100毫秒,而在2万张图像之后,大约需要170毫秒。与此同时,文件“video.avi”正在创造和发展。
使用另一组图像(相同的大小和格式),在获得1万张图像后,每张图像最多可获得3.5秒。
我的问题是:这种行为是否正常?
答案 0 :(得分:0)
我的设置可能与您的设置完全不同,但这就是我的设置。您可以发布有关您的设置,编解码器等的更多详细信息吗?
这对我来说似乎不正常。下面是一个使用opencv和python的简单视频编写器。对于640x480(黑色)图像,10,000帧的写入时间直方图范围为~0到2ms。
from collections import deque
import os
import time
import cv2
from cv2 import cv
import numpy
images_directory = 'images'
output_name = 'video.avi'
fps = 25
size = (640, 480)
is_color = True
frames_to_produce = 10000
write_times = deque()
writer = cv2.VideoWriter(output_name, -1, fps, size, is_color)
# writer = cv2.VideoWriter(output_name, cv.CV_FOURCC('x', 'v', 'i', 'd'),
# fps, size, is_color)
if writer.isOpened():
for i in xrange(frames_to_produce):
filename = os.path.join(images_directory, str(i % 10) + '.png')
image = cv2.imread(filename)
if image is not None:
write_time_start = time.time()
writer.write(image)
write_times.append(time.time() - write_time_start)
print 'frames: {}'.format(len(write_times))
histogram = numpy.histogram(write_times, bins=5)
for count, bin_ in zip(*histogram):
print '{0}: {1:.5f}'.format(count, bin_)
产量
和帧数:帧时间
我没有做过图表,但如果你想要我,我可以。