我正在創建一個Swift UI應用程式來處理設備上的影像并使用該OpenCV庫,特別是BackgroundSubtractor演算法。我能夠按照OpenCV iOS 指南執行基本影像操作,例如拍攝影像、轉換為矩陣、使其變灰或使用 OpenCV 函式執行按位運算,但是當我嘗試使用 BackgroundSubtractor.apply 方法時,應用程式崩潰EXC_BAD_ACCESS錯誤:
Thread 1: EXC_BAD_ACCESS (code=2, address=0x10455aa40)
這是我的代碼:
(UIImage *)toMyGreatImage:(UIImage *)source {
Mat sourceMat = [OpenCVWrapper _matFrom:source];
Mat result;
BackgroundSubtractor *backSub = createBackgroundSubtractorMOG2();
Mat mask;
backSub->apply(sourceMat, mask); // crashes here
return [OpenCVWrapper _imageFrom:mask];
}
只是為了比較,我的其他功能與相同的源影像完美配合:
(UIImage *)toGray:(UIImage *)source {
return [OpenCVWrapper _imageFrom:[OpenCVWrapper _grayFrom:[OpenCVWrapper _matFrom:source]]];
}
我還在 python 中測驗了背景減法器代碼,它按預期作業。我在 iOS 設定中遺漏了什么?
uj5u.com熱心網友回復:
您需要一個“智能指標”來捕獲新創建的 BackgroundSubtractor 實體(不是“原始”實體),否則它會自毀并在您呼叫無效指標上的方法時崩潰:
cv::Ptr<BackgroundSubtractor> backSub = createBackgroundSubtractorMOG2();
(注意,這cv::Ptr只是std::shared_ptr當今的別名)
(也,教程)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/424713.html
