現象:配置 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;
}
imread 返回空 Mat,後續操作 (如 cvtColor, imshow) 拋出 cv::Exception (通常代碼 -215: 斷言失敗 !src.empty())。img.empty()。opencv_xxx2410.lib 與運行時加載的 opencv_xxx2410.dll 不一致 (如混用 debug/release、不同編譯器版本)。PATH 中優先找到正確 DLL,或將 DLL 複製到 .exe 目錄。VideoCapture cap(0) 默認後端失敗。cap.open(0 + CAP_DSHOW) (參考文章 33199)。opencv_highgui2410.dll、opencv_imgcodecs2410.dll 等未部署。Dependency Walker 檢查 .exe 依賴。img.empty() 判斷後再處理。cv::Exception 並輸出 e.what()。拿到具體 what() 字符串 (如 OpenCV(2.4.10) Error: Assertion failed (!src.empty()) in cv::cvtColor) 即可精準定位行號與原因,對症下藥。