- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 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/
第一次保存视频后,应用程序需要添加更多的帧。但是,如果视频文件存在,VideoWriter 对象将覆盖现有视频。我使用下面的代码编写视频(它是一个函数调用): videoWriter = Video
当我尝试使用 VideoWriter 编写帧时,它不起作用。我已经尝试了很多 FOURCC 代码,例如 defaul、h264、mjpg、divx、xvid 等。是的,我已经安装了具有所有必要配置的
这是我保存 web_cam 流的代码。它正在工作,但输出视频文件的问题。 import numpy as np import cv2 cap = cv2.VideoCapture(0) # Defin
我正在尝试使用如下所示的 Python 脚本从我的网络摄像头流式传输和保存视频,但出于某种原因,“myvideo.mp4”文件非常小,无法使用 QuickTime(或其他播放器)打开 -它似乎是空的。
我正在尝试测量输入视频文件中的某些事件:“test.mp4”。这是通过分几个步骤处理视频来完成的,其中每个步骤对视频数据执行一些操作并将中间结果写入新的视频文件。 输入视频的fps为:29.42346
我正在使用OpenCV 2.4.9和Visual C++2017。我正在编写视频,出于测试目的,尝试在完整的磁盘上编写框架。 我做了 try { video_writer << frame;
我正在构建一个脚本,以通过CSV文件将边框叠加到我的视频上。每个框架都有n个边界框,因此我只是遍历每个框架中的边界框并在该框架上绘制cv2.rectangle。结果,对于所有框架,我都会多次写入一个框
import numpy import cv2 import random image=cv2.imread(r"C:\Users\Sriram\Desktop/img.png") print(ima
我正在尝试使用 opencv videowriter api 从视频卡设备流式传输连续图像,下面是执行该操作的 opencv 代码片段,我的问题是我正在获取帧但没有在/var/中生成任何 index.
问题:我在正确渲染/播放由OpenCV的视频编写器创建的视频时遇到问题。 详细信息:Python不会吐出任何错误,而是可以成功播放/创建视频。当我尝试使用VLC播放视频时,似乎VLC尝试播放空视频(时
我是新手,开始在 ubuntu 10.4 上使用 OpenCV。我正在尝试从相机捕获视频并将该视频写入 avi 文件,代码如下: #include "opencv2/opencv.hpp" #incl
我要从视频采集卡中捕捉帧。这些帧被处理并写入硬盘。整个设置处于多线程环境中,因此抓取器将图像写入队列,在另一个线程中处理图像,另一个线程写入硬盘。如果图像符合处理器的定义,则图像将写入硬盘。如果连续
我正在尝试将网络摄像头的记录写入文件。为此,我使用以下代码。我一直得到 2 的退出代码。有人可以帮我找出问题所在吗?我以前使用过类似的函数调用,将一个视频文件的帧写入一个新文件,并且有效。无法理解这种
我是一名数学本科生,几乎没有编程经验。不过,我对计算机视觉很感兴趣。试图遵循 Learning OpenCV 这本书,但它有点过时了。如何将生成的视频文件保存在我的 linux 主目录中?例如“/ho
我正在研究视频的深度学习算法。给定一个视频片段,我想将我的结果保存在另一个视频中。为此,我在 Windows 上使用 OpenCV 和 Python。OpenCV 对我的视频预处理工作正常,可以训练我
以下代码无法打开 VideoWriter 对象: #include #include #include #include using namespace cv; using namespace
我正在编写一个程序来读取多个网络摄像头,将图片拼接在一起并将它们保存到视频文件中。 我应该使用线程来捕获图像并将生成的大图像写入文件吗? 如果是,我应该使用 c+11 还是 boost? 您是否有一些
我正在尝试从两张图片创建 1fps webm,代码: // path to output string outputVideoPath = "/home/gio/Desktop/gif
我对 OpenCV VideoWriter 有疑问。 目前我有 2 个项目:一个在 C# 中,一个在 C++ 中。 C# 项目会读取*.bmp 文件,创建位图列表,然后在C++ 项目中调用writeV
使用 OpenCV 2.4.8(预构建的二进制文件)运行 Windows 7、x64。 尝试以下基本代码: VideoWriter wrt; wrt.open("video.mp4", -1, 29
我是一名优秀的程序员,十分优秀!