2017-04-08 3 views
1

Ich versuche OpenCV die chamferMatching Funktion zu nutzen, auf OSX zu arbeiten, aber eine Fehlermeldung über einen gescheiterten Versuch, immer Objekte zu befreien, die nicht zugewiesen wurden (soweit ich das beurteilen kann):Wie bekomme ich chamerMatching, um unter OSX zu arbeiten?

fs(58697,0x100b3c000) malloc: *** error for object 0x103800000: pointer being freed was not allocated 
*** set a breakpoint in malloc_error_break to debug 

gefunden paar hilfreiche Beiträge wie diese beiden:

  1. chamerMatching malloc error
  2. debug assertion failed vc\include\vector vector iterator + offset out of range in chamferMatching Opencv

auf Ubuntu, s implizieren kompilieren OpenCV 2.4.1 von der Quelle und die Verwendung, die den Trick gemacht hat.

Das gleiche funktionierte jedoch nicht auf OSX. Ich habe auch die Vorlagen Deletion in dem Matching destructor auf Kommentar:

~Matching() 
     { 
      for (size_t i = 0; i<templates.size(); i++) { 
       // delete templates[i]; 
      } 
     } 

aber keine Freude.

Ich habe sogar versucht, alle DELETE-Anweisungen in Chamfermatching.cpp kommentieren, aber ich bekomme immer noch den gleichen Fehler.

Update Ich habe versucht, OpenCV 2.4.1 mit 3 verschiedenen Versionen von g ++: 4.9, 5 und 6 neu zu kompilieren, aber ich bekomme Linkfehler. Hier ist ein Beispiel mit g ++ kompiliert 5:

g++-5 ../fs.cpp -I/Users/George/Downloads/Grouped/cv/opencv-2.4.1/build/install/include/opencv -I/Users/George/Downloads/Grouped/cv/opencv-2.4.1/build/install/include -L/Users/George/Downloads/Grouped/cv/opencv-2.4.1/build/install/lib -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_video -lopencv_videostab -o fs 
Undefined symbols for architecture x86_64: 
    "cv::chamerMatching(cv::Mat&, cv::Mat&, std::vector<std::vector<cv::Point_<int>, std::allocator<cv::Point_<int> > >, std::allocator<std::vector<cv::Point_<int>, std::allocator<cv::Point_<int> > > > >&, std::vector<float, std::allocator<float> >&, double, int, double, int, int, int, double, double, double, double)", referenced from: 
     _main in ccTJvcHd.o 
    "std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > cv::CommandLineParser::analyzeValue<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)", referenced from: 
     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > cv::CommandLineParser::get<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) in ccTJvcHd.o 
    "cv::CommandLineParser::has(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)", referenced from: 
     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > cv::CommandLineParser::get<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) in ccTJvcHd.o 
    "cv::CommandLineParser::getString(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)", referenced from: 
     std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > cv::CommandLineParser::get<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) in ccTJvcHd.o 
    "cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)", referenced from: 
     _main in ccTJvcHd.o 
    "cv::imshow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)", referenced from: 
     _main in ccTJvcHd.o 
ld: symbol(s) not found for architecture x86_64 
collect2: error: ld returned 1 exit status 

Ich habe versucht, Flaggen wie -std=c++11 dann -std=c++0x hinzufügen, aber keine Freude.

Irgendwelche Tipps, wie ich über dieses Problem hinwegkommen könnte?

Antwort

0

Obwohl hacky, eine Option auf OSX (sogar mit OpenCV 2.4.13) gearbeitet: Entfernen der kompilierten .dylib und Hinzufügen der unkompilierten Contrib-Modul zum Projekt.

Für OpenCV 2.4.1 war es nur eine Frage des Auskommentierens der Löschanweisung. Für OpenCV 2.4.13 musste ich auch zwei cvconfig.h includes kommentieren.

Verwandte Themen