首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

OpenCV VS2010 C++ 運行時 cv::Exception 崩潰:調試定位異常類型與圖像加載失敗原因

     編輯:程式設計綜合問答

現象:配置 OpenCV 2.4.10 + VS2010,運行顯示圖片/攝像頭代碼,斷點處拋出 cv::Exception,地址 0x009ded64。

核心調試步驟:捕獲異常詳情

**不要只看地址,必須捕獲異常對象查看 what() 信息。**

try {
    Mat img = imread("test.jpg"); // 或 cap.read(frame)
    if (img.empty()) {
        cerr << "圖像為空: 路徑錯誤/攝像頭未就緒" << endl;
        return -1;
    }
    imshow("窗口", img);
    waitKey(0);
} catch (const cv::Exception& e) {
    cerr << "OpenCV 異常: " << e.what() << endl; // 關鍵:輸出具體錯誤描述
    cerr << "錯誤代碼: " << e.code << ", 文件: " << e.file << ", 行: " << e.line << endl;
} catch (const std::exception& e) {
    cerr << "標準異常: " << e.what() << endl;
}

常見導致 cv::Exception 的原因

  1. 圖像路徑錯誤/讀取失敗:
    imread 返回空 Mat,後續操作 (如 cvtColor, imshow) 拋出 cv::Exception (通常代碼 -215: 斷言失敗 !src.empty())。
    → 用絕對路徑、檢查 img.empty()。
  2. DLL 版本不匹配:
    編譯鏈接的 opencv_xxx2410.lib 與運行時加載的 opencv_xxx2410.dll 不一致 (如混用 debug/release、不同編譯器版本)。
    → 確保 PATH 中優先找到正確 DLL,或將 DLL 複製到 .exe 目錄。
  3. 攝像頭後端不支援:
    VideoCapture cap(0) 默認後端失敗。
    → 顯式指定 cap.open(0 + CAP_DSHOW) (參考文章 33199)。
  4. 缺少必要模組 DLL:
    opencv_highgui2410.dll、opencv_imgcodecs2410.dll 等未部署。
    → 依賴 Dependency Walker 檢查 .exe 依賴。

快速自查清單

  • ☑ 圖片路徑絕對正確、文件存在。
  • ☑ img.empty() 判斷後再處理。
  • ☑ 專案屬性 → Linker → Input → Additional Dependencies 包含正確 lib。
  • ☑ 運行目錄下有對應版本 DLL (Debug 版對應 Debug DLL)。
  • ☑ 捕獲 cv::Exception 並輸出 e.what()。

拿到具體 what() 字符串 (如 OpenCV(2.4.10) Error: Assertion failed (!src.empty()) in cv::cvtColor) 即可精準定位行號與原因,對症下藥。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved