на Mac OSX 10.8, XCode 4.6, в C ++
Я следую за учебником в opencv_tutorials.pdf
, находится в /opt/local/share/OpenCV/doc
в моей системе. На странице 311 мы получаем этот пример (слегка отредактированный):
#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"#include "opencv2/features2d/features2d.hpp"#include "opencv2/highgui/highgui.hpp"using namespace cv;
int main( int argc, char** argv ) {
Mat img_1 = imread( argv[1], CV_LOAD_IMAGE_GRAYSCALE );
int minHessian = 400;
SurfFeatureDetector detector( minHessian );
std::vector<KeyPoint> keypoints_1;
detector.detect( img_1, keypoints_1 );
}
Мне пришлось изменить код выше, чтобы #include "opencv2/nonFree/features2d.hpp"
, файл, который я нашел, запустив
find /opt/local/include -name "*.hpp" -exec grep SurfFeatureDetector "{}" ';' -print
Код компилируется, что означает, что символ detector.detect
находится в hpp
файл и проходит проверку типа компилятором C ++. Далее стоит попытаться найти библиотеки, которые содержат символы.
Теперь у меня есть эти библиотеки в моем дистрибутиве, в /opt/local/lib
:
libopencv_calib3d.2.4.3.dylib
libopencv_contrib.2.4.3.dylib
libopencv_core.2.4.3.dylib
libopencv_features2d.2.4.3.dylib
libopencv_flann.2.4.3.dylib
libopencv_gpu.2.4.3.dylib
libopencv_highgui.2.4.3.dylib
libopencv_imgproc.2.4.3.dylib
libopencv_legacy.2.4.3.dylib
libopencv_ml.2.4.3.dylib
libopencv_nonfree.2.4.3.dylib
libopencv_objdetect.2.4.3.dylib
libopencv_photo.2.4.3.dylib
libopencv_stitching.2.4.3.dylib
libopencv_ts.2.4.3.dylib
libopencv_video.2.4.3.dylib
libopencv_videostab.2.4.3.dylib
Я нашел это неинформативным для nm
ищите в них нужные символы, потому что искажение имени трудно декомпилировать в моей голове. Я просто перебор включил все библиотеки, но все еще получаю ошибки компоновщика:
Undefined symbols for architecture x86_64:
"cv::imread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from:
_main in main.o
"cv::FeatureDetector::detect(cv::Mat const&, std::__1::vector<cv::KeyPoint, std::__1::allocator<cv::KeyPoint> >&, cv::Mat const&) const", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
Я провел некоторую выборочную проверку справочных документов OpenCv и вики-страниц, начиная с этой страницы.
http://opencv.willowgarage.com/documentation/cpp/features2d__feature_detection_and_descriptor_extraction.html
но без успеха.
Я был бы благодарен за
Мой набор инструментов использует CMake для отслеживания подобных вещей. Для большинства новых библиотек, которые я использую, обычно есть Google Search * сопровождающие файлы Find * .cmake, которые написаны другими. Если вам нужна дополнительная информация о моей конкретной настройке, не стесняйтесь спрашивать. Я видел эту конкретную проблему (неопределенные символы для архитектуры x86_64) несколько раз для вещей в несвободных библиотеках. Я не уверен, почему вы получаете эту ошибку за непрочитанное, хотя. Первое место, которое я бы посмотрел, это пример matcher_simple.cpp в папке samples / cpp. Если вы можете скомпилировать и запустить это (используя этот) и другие примеры, ваша установка должна быть в порядке. Если вы не можете, не могли бы вы опубликовать ошибки этого примера? Я не знаком с XCode, но кто-нибудь другой предложил перейти в Настройки сборки> Параметры сборки> Компилятор для C / C ++ / Objective-C и изменить его с Apple LLVM Compiler на LLVM GCC 4.2. И есть еще несколько догадок Вот тоже.
На Linux и использование OpenCV 3.0.0 Я должен был связаться с opencv_imgcodecs
общая библиотека
Попробуйте в том числе -lopencv_features2d
а также -lopencv_nonfree
в вашем списке других флагов компоновщика в настройках сборки. У меня были те же проблемы, и у меня это сработало