2016-07-19 41 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的觀點,實際上大多數情況下,以這種方式保存資料的速度要快很多,然而,在問題本身的精神下,如果您需要文本的原因有很多,那麼沒有理由不使用可用的工具。 –