2016-07-19 43 views
0

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

我不知道保存到文本文件是否是个好主意,我打开了一些建议。

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

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

到目前为止,我的代码是:你必须唉建议,我怎么能投或转换此行字符串太obejct

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 "); 

做什么?

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

} 

谢谢。

顺便说一句,我看了这个解决方案,但我不明白。 Convert a string of bytes to cv::mat

我无法找到C++中的字节类型,我觉得可能是字符串垫目标之间的直接转换。

回答

2

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

我高度推荐使用本机C++方法来处理文件。

这是专门为您处理所有这些legwork。

+0

而不是保存到文本,xml/yaml文件,如何保存为图像.png格式?然后,它可以作为视频输入帧进行处理。但是,如果您尝试在运行时创建视频,则会减慢整个过程。 –

+0

我同意@Ahmet Tavli的观点,实际上大多数情况下,以这种方式保存资料的速度要快很多,然而,在问题本身的精神下,如果您需要文本的原因有很多,那么没有理由不使用可用的工具。 –