OpenCV从文本文件创建视频

Posted

技术标签:

【中文标题】OpenCV从文本文件创建视频【英文标题】:OpenCV Creating Video From Text File 【发布时间】:2016-07-19 20:54:30 【问题描述】:

我正在尝试构建一个应用程序,它从网络摄像头或外部设备获取数据,将视频帧保存到文本文件中,然后从创建的文本文件中读取帧。

我不知道保存到文本文件是否是个好主意,我是开放的建议。

到目前为止,我已经完成了保存到文本文件的工作。

我的问题是从文本文件中读取。基本上我逐行阅读文本,但我不知道如何将此文本转换为 Mat 对象。

到目前为止,我的代码是:

ifstream read_storage(new_vid_frm_path);
if(!read_storage.is_open()) 
    perror("\n\n\n\t\t\t(-)FAIL : Can't Open SavedVideoFrames.txt\n\n\n\t\t\t");
    return -1;


VideoWriter *vid = new VideoWriter(new_vid_frm_path,CV_FOURCC('P', 'I', 'M', '1'),30,Size(vc.get(CV_CAP_PROP_FRAME_WIDTH),vc.get(CV_CAP_PROP_FRAME_HEIGHT)));
Mat line;
vector<Mat> vid_frms;
while ( getline (read_storage,line) ) 
    cout << line << '\n';



read_storage.close();

if(vid_frms.size() == 0)
    printf("\n\n\n\t\t\t(-)FAIL: Error In Frame\n\n\n\t\t\t");
    return -1;


for(size_t i = 0; i<vid_frms.size(); i++)
    (*vid).write(vid_frms[i]);

printf("\n\n\n\t\t\t(+)SUCCESS: Video Processing Complete \n\n\n\t\t\t ");

您有什么建议我可以如何将此行字符串转换或转换为 Mat obejct?

while ( getline (read_storage,line) ) 
    cout << line << '\n';


谢谢。

顺便说一句,我查看了这个解决方案,但我无法理解。 Convert a string of bytes to cv::mat

我在 c++ 中找不到字节类型,我认为 String 到 Mat 对象之间可能存在直接转换。

【问题讨论】:

【参考方案1】:

您可以将 OpenCV 中的任何内容(几乎)保存到 .xml 或 .yml 文本文件,然后使用 OpenCV XML/YAML FileStorage 方法将其读回。

我强烈建议不要使用本机 C++ 方法处理文件。

它是专门为您处理所有这些跑腿工作而设计的。

【讨论】:

不是保存到文本,xml/yaml文件,保存为图片.png格式怎么样?然后可以将其作为视频输入帧进行处理。但是,如果您尝试在运行时创建视频,则会减慢整个过程。 我同意@Ahmet Tavli 的观点,实际上大多数情况下不以这种方式保存东西要快得多,但是根据问题本身的精神,如果有充分的理由需要文本,没有理由不使用可用的工具。

以上是关于OpenCV从文本文件创建视频的主要内容,如果未能解决你的问题,请参考以下文章

opencv--视频操作

OpenCv - 输出视频未播放

OpenCV—读取视频,显示视频,保存视频

OpenCV--视频文件相关操作

从0-1轻松入门 OpenCV4

[OpenCV-Python] OpenCV 中的 Gui 视频