Недавно я работал с платформой OpenCV (версия 3.4.3) для Xcode (версия 10.0), с которой я пытаюсь создать карту глубины из стереоизображений (на основе шагов, описанных в этот урок ; хотя и не на Python).В качестве попытки я создал следующую функцию:
+ (UIImage *)to3D:(UIImage *)ui1 :(UIImage *)ui2 {
Mat cv1(ui1.size.width, ui1.size.height, CV_8UC4);
Mat cv2(ui2.size.width, ui2.size.height, CV_8UC4);
Mat dsp(ui2.size.width, ui2.size.height, CV_8UC4);
UIImageToMat(ui1, cv1, true);
UIImageToMat(ui2, cv2, true);
StereoBM *stereo = StereoBM::create(16, 15);
stereo -> StereoBM::compute(cv1, cv2, dsp);
return MatToUIImage(dsp);
}
Я включил эту функцию как часть моей настройки OpenCV (на основе этой статьи ).
КогдаЯ пытаюсь построить решение, однако я столкнулся с этой ошибкой:
Undefined symbols for architecture arm64:
"cv::StereoMatcher::compute(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&)", referenced from:
+[OpenCV to3D::] in OpenCV.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Просматривая заголовок ошибки, я обнаружил этот вопрос StackOverflow и просмотрел некоторые ответы.Хотя некоторые решения немного устарели, я убедился, что атрибут Other Linker Flags
содержит аргумент $(inherited)
и что целевое членство для вышеупомянутого файла было включено.Я также попытался изменить атрибут C++ Standard Library
, но безрезультатно.
Поскольку код StereoBM::create()
не вызывает никаких проблем, а подсветка синтаксиса и автозаполнение кода отвечают на код StereoBM::compute()
какожидается, я не уверен, как решить эту проблему.