【发布时间】:2014-02-25 15:51:01
【问题描述】:
我有一个简单的应用程序,它使用 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”文件正在创建和增长中。
使用另一组图像(相同大小和格式),我在 10000 张图像后每张图像获得最多 3.5 秒。
我的问题是:这种行为正常吗?
【问题讨论】:
-
我没有答案,只是一个孤立的问题——如果在很多帧之后你执行一个新的
video.open,性能会重置吗?在我看来,这将有助于指出可能出了什么问题。 -
我猜如果我重新打开文件,我会丢失视频的第一部分。
-
我的意思是打开一个新文件。重点是检查问题是由于视频中的帧数过多造成的,还是由于多次调用后write方法本身的其他原因造成的。
-
您的图片有多大?我正在尝试在 python 上使用 opencv 重现它,到目前为止我没有减速。
-
图片为 640x896。通过重新处理文件,执行时间再次从几毫秒开始。所以它可能与
VideoWriter