2014-01-09 95 views
2

我一直在努力一段時間無法使用FileStorage打開文件:它是來自以下代碼的一部分:\ opencv \ sources \ samples \ cpp \ tutorial_code \ calib3d \ camera_calibration \ camera_calibration.cpp:Opencv FileStorage操作 - 無法打開:

FileStorage fs(inputSettingsFile, FileStorage::READ); // Read the settings 
if (!fs.isOpened()) 
{ 
    cout << "Could not open the configuration file: \"" << inputSettingsFile << "\"" << endl; 
    return -1; 
} 

它總是失敗。也嘗試過絕對路徑,仍然失敗。環境:Opencv版本:2.4.8,Windows 7(32位)和Visual Studio 2010.(其實,嘗試2.4.2和VS2008,同樣的問題)我缺少什麼?

要驗證權限,請在FileStorage之前添加常規cpp文件。正常的cpp文件讀取工作正常:

int main() 
{ 
    ////Use two ways to open and read the file "in_VID5.xml" 

    string inputSettingsFile = "in_VID5.xml"; 
    //// Method 1: cpp read file - ok 
    ifstream myfile(inputSettingsFile); 
    string line; 
    if(myfile.is_open()) 
    { 
     while (getline(myfile, line)) 
     { 
      ////It does come here 
      cout << line <<'\n'; 
     } 
     myfile.close(); 
    } 

    Sleep(1000); 
    ////Method 2: opencv read file - fails 
    FileStorage fs(inputSettingsFile, FileStorage::READ); // Read the settings 
    if (!fs.isOpened()) 
    { 
     ////It fails 
     cout << "Could not open the configuration file: \"" << inputSettingsFile << "\"" << endl; 
     return -1; 
    } 
    return 0; 
} 
+0

你有權限讀取文件嗎? –

+0

文件路徑的擴展是什麼? – 0x499602D2

+0

文件路徑爲「」.xml「」,「」.yml「」還是「.yaml」「?請選擇您的文章上的編輯按鈕並回復我們。我認爲你還沒有足夠的聲望來評論。 – 0x499602D2

回答

0

其實我遇到了同樣的問題。經過一番檢查,我意識到cv :: FileStorage的構造函數總是返回一個錯誤的指針(Bad Ptr)。實際上,其他opencv庫函數也會發生同樣的問題,例如現有項目中的imread。

我只是解決了這個漏洞通過檢查選項修改符號文件緩存設置:

Options -> Debugging -> Symbols -> Microsoft Symbol Servers 

也許有人可以給出一個明確的解釋與此症狀和治癒奇怪的問題。

+0

抱歉,當我找到解決方案時,我假設編輯答案。現在我找到了。感謝您的麻煩和關注! – fina12

0

也許你在錯誤的庫中使用的編譯模式。

如果您的編譯模式是調試,則OpenCV庫必須是調試版本並且只能調試版本,不包括髮布版本。

因此,請嘗試檢查編譯配置文件。

0

我有同樣的問題,直到我意識到構造函數不能使用READ標誌。 所以我所做的是: - 我使用falg APPEND的構造函數。如果我使用WRITE,則文件的內容被刪除。 - 然後我打開READ標誌並處理內容。