如何让chamerMatching在OSX上工作?

时间:2017-04-08 00:26:34

标签: xcode macos opencv computer-vision malloc

我尝试使用OpenCV的倒角匹配功能来处理OSX,但是在尝试释放未分配的对象时遇到错误(据我所知):

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

我发现这两个有用的帖子很少:

  1. chamerMatching malloc error
  2. debug assertion failed vc\include\vector vector iterator + offset out of range in chamferMatching Opencv
  3. 在Ubuntu上,只需从源代码编译OpenCV 2.4.1并使用它就可以了。

    但同样在OSX上也无效。我还在Matching析构函数中删除了模板删除:

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

    但没有快乐。

    我甚至尝试在chamfermatching.cpp中注释掉所有删除语句,但我仍然遇到同样的错误。

    更新我尝试使用3种不同版本的g ++重新编译OpenCV 2.4.1:4.9,5和6,但我收到链接错误。这是用g ++ 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
    

    我尝试添加-std=c++11然后-std=c++0x等标志,但没有欢乐。

    有关如何解决此问题的任何提示?

1 个答案:

答案 0 :(得分:0)

虽然hacky,一个选项适用于OSX(即使使用OpenCV 2.4.13):删除已编译的.dylib并将未编译的contrib模块添加到项目中。

对于OpenCV 2.4.1,只需要注释掉删除语句。 对于OpenCV 2.4.13,我还必须注释掉两个cvconfig.h include。