- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试将来自 1080p 网络摄像头的视频录制到文件中。我在视频中设置了一个计时器,在每次试验中,视频播放器(我使用的是 VLC)报告的时间戳与视频中的时间不同步。它总是关闭几秒钟(通常视频内计时器比玩家报告的时间快)。
如下所示,我将 C++ 程序设置为在一个线程中捕获视频,并在另一个线程中进行录制。这工作正常,因为我的 CPU 使用率约为 200%(可能达到最大值?)。我使用的是装有 OS X 10.8 @ 1.8 GHz Intel Core i7 的 Macbook Air。
我试过将帧速率更改为 15fps,这导致视频非常不稳定/缓慢。我也试过设置 CV_CAP_PROP_FRAME_WIDTH
& CV_CAP_PROP_FRAME_HEIGHT
到较低的分辨率,这会导致视频速度变慢。看起来 1080p @ 30fps 可以生成稳定的视频,但播放速度仍然总是比预期的快。我也试过输入 waitKey(10);
在 record << frame;
之后但它没有影响任何东西。
关于如何使视频及时匹配有什么建议吗?
谢谢!阿卡什
#include "opencv/cv.h"
#include "opencv/highgui.h"
#include <boost/thread.hpp>
using namespace cv;
void captureFunc(Mat *frame, VideoCapture *capture){
for(;;){
// get a new frame from camera
(*capture) >> (*frame);
}
}
int main(int, char**)
{
VideoCapture capture(0); // open the default camera
if( !capture.isOpened() ) {
printf("Camera failed to open!\n");
return -1;
}
capture.set(CV_CAP_PROP_FPS,30); //set capture rate to 30fps
Mat frame;
capture >> frame; // get first frame for size
// initialize recording of video
VideoWriter record("test.avi", CV_FOURCC('D','I','V','X'), 30, frame.size(), true);
if( !record.isOpened() ) {
printf("VideoWriter failed to open!\n");
return -1;
}
boost::thread captureThread(captureFunc, &frame, &capture); //start capture thread
sleep(1); //just to make sure capture thread is ready
for(;;)
{
// add frame to recorded video
record << frame;
}
return 0;
}
最佳答案
经过一些调试我解决了我的问题;这是 VideoWriter 对帧的馈送速率挑剔的问题。
关于c++ - OpenCV VideoWriter 帧率问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17091975/
第一次保存视频后,应用程序需要添加更多的帧。但是,如果视频文件存在,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
我是一名优秀的程序员,十分优秀!