gpt4 book ai didi

opencv - C++/OpenCV 使用 VideoWriter 更改文件名并停止记录

转载 作者:太空宇宙 更新时间:2023-11-03 22:30:46 25 4
gpt4 key购买 nike

我正在使用 MOG2 检测轮廓并希望在某物移动时保存视频文件(例如轮廓 > x)。这里的问题是,一旦移动的 body 消失(例如轮廓 == 0),我想停止“写入”,并在前一次记录停止后一旦有东西移动就写入一个新文件。

仅保存 1 个视频文件本身不是问题,我还设法创建了多个具有不同文件名的文件。问题是:

1)视频不停:有没有办法在不退出循环的情况下停止写入?

2) 如果我使用“我的方式”创建新的 avi 文件,它们不会超过 455kB 并且无法观看/打开。 如何更改循环中的文件名,以便它实际创建工作文件?

这是我的代码的重要部分:

只有 1 个文件的版本:

BackgroundSubtractorMOG2 bg(10,100,true);
vector < vector < Point > >contours;
Mat fgmask, fgimg, backgroundImage;
VideoWriter video("out.avi", CV_FOURCC('I','Y','U','V') ,10, Size(camera1_undist.cols, camera1_undist.rows),true);

和编写视频的循环:

while(1)
{
bg.operator()(camera1_undist, fgimg);
bg.getBackgroundImage(backgroundImage);


findContours(fgimg, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
drawContours(camera1_undist, contours, -1, Scalar(0,0,255), 2);

video << camera1_undist;
no_new_movement = false;

imshow("Motion", camera1_undist);
imshow("Background", backgroundImage);
}

我不知道如何停止一个视频并开始一个具有实际工作的新文件名的新视频。为了创建多个文件,我尝试添加这个(并将 VideoWriter 从顶部移开):

        if(contours.size() >= 15 && contours.size() < 100)
{
sprintf(filename, "out_%06d.avi", index);
VideoWriter video(filename, CV_FOURCC('I','Y','U','V') ,10, Size(camera1_undist.cols, camera1_undist.rows),true);
video << camera1_undist;
no_new_movement = false;
}
if(!no_new_movement)
{
index++;
no_new_movement = true;
}

我真的希望有人可以就上述问题给我一些意见 - 停止 VideoWriter::write 并更改用于在循环中写入的文件名。

谢谢:)

最佳答案

1) The video doesn't stop: Is there any way to stop the writing without leaving the loop?

是的。通过video << camera1_undist; 将一帧添加到视频中, 正确的?!所以在循环中,每当你觉得不需要再添加帧时,只需将控制变量的值更改为false即可。 :

if (should_add_frames) {
video << camera1_undist;
}

2) If I use "my way" of creating new avi-files they are no bigger than 455kB and can't be watched/opened. How can I change the filename in the loop so that it actually creates working files?

在循环内,每当需要更改文件名时,使用另一个控制变量执行以下代码:

if (should_change_filename) {
video.release();
video.open(new_filename,
CV_FOURCC('I','Y','U','V'),
10,
Size(camera1_undist.cols, camera1_undist.rows),
true);
}

关于opencv - C++/OpenCV 使用 VideoWriter 更改文件名并停止记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25891195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com