簡體   English   中英

OpenCV imread(std::string filename, int flags) 在 c++ 中使用字符串文件名變量時出現問題

[英]OpenCV imread(std::string filename, int flags) problem when using a variable for string filename in c++

我有一個 function 是這樣的:

void OpenPattern(std::string filename, bool type){
    Mat img = cv::imread(filename, cv::IMREAD_COLOR);
    if(img.empty()){
        printf("CANNOT OPEN IMAGE");
    }else{
        doSomethingElse();
    }
}

代碼編譯正常,但是當我運行它時,img 總是空的。 我已經測試了存儲圖像的相對路徑和完整路徑的文件名。 都沒有在這里工作。 我每次都打印文件名內容,它與圖像地址完美匹配。 它僅在我這樣測試時才有效:

void OpenPattern(std::string filename, bool type){
    filename="path to image" //worked with relative and full path
    Mat img = cv::imread(filename, cv::IMREAD_COLOR);
    //or
   //Mat img = cv::imread("path to image", cv::IMREAD_COLOR);
    if(img.empty()){
        printf("CANNOT OPEN IMAGE");
    }else{
        doSomethingElse();
    }
}

我想很多人都問過類似的問題(就像這里的這個imread() won't read string variable in c++ ),但我還沒有找到答案。

有誰知道為什么當文件名是 function 參數時 imread() 根本無法打開? 或者有誰知道是否有辦法調查 imread 決定返回 NULL Mat 的位置,這樣我可以更好地調查發生了什么?

編輯:

  1. “圖像路徑”和文件名 100% 相等。 事實上,在我的一項測試中,我使用 imwrite(filename, a) 保存了一張與我想要打開的圖像同名的圖像,並且它有效。
  2. 我嘗試了文件名的所有變體:使用 /、\、相對路徑、絕對路徑。 3.這個代碼應該是另一個代碼的重構版本。 舊版本確實可以正確打開圖像,但我不知道為什么這個不能。

非常感謝!

我不知道 OpenCV,但也許這會有所幫助。 這些是我在使用其他庫和語言時遇到的問題。

確保路徑格式正確。 你有沒有逃脫斜線和其他特殊字符? 您是否嘗試過正斜杠和反斜杠? 您是否有空格,但不受支持? 您是否嘗試過以斜線開頭和不以斜線開頭的路徑?

我發現在 function 的參數中傳遞的字符串有一個不可見的 '\r' 導致 imread() 錯過了文件。

我嘗試將參數字符串的大小與寫入的字符串“圖像路徑”進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM