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

OpenCV cvFitEllipse2 拋出 cv::Exception 的排查與自查方法

     編輯:程式設計綜合問答

常見觸發條件

  • 輸入點集 少於 5 個點(擬合橢圓至少需 5 個點)。
  • 點集共線或幾乎共線,導致矩陣奇異。
  • 點集包含 NaN/Inf 或極大值導致數值溢出。
  • OpenCV 版本不匹配(動態庫與頭文件版本不一致)。

自查步驟

  1. 捕獲異常詳情:
try {
    RotatedRect box = fitEllipse(points);
} catch (const cv::Exception& e) {
    std::cerr << "OpenCV Error: " << e.what() << std::endl;
    std::cerr << "Function: " << e.func << std::endl;
    std::cerr << "File: " << e.file << ":" << e.line << std::endl;
    std::cerr << "Code: " << e.code << std::endl; // 錯誤碼對照 modules/core/include/opencv2/core/base.hpp
}
  1. 檢查點集:
std::cout << "Points count: " << points.size() << std::endl;
for (auto& p : points) 
    std::cout << "(" << p.x << ", " << p.y << ") ";
if (points.size() < 5) { /* 處理或跳過 */ }
  1. 最小外接矩形替代:若僅需近似形狀,minAreaRect(points) 只需 3 個點,穩健性更高。

版本一致性檢查

std::cout << CV_VERSION << std::endl; // 編譯時版本
std::cout << cv::getBuildInformation() << std::endl; // 運行時版本

確保編譯、運行鏈接同一版本 OpenCV。

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