【问题标题】:How to get chamerMatching to work on OSX?如何让 chamerMatching 在 OSX 上工作?
【发布时间】:2017-04-08 00:26:33
【问题描述】:

我正在尝试使用 OpenCV 的 chamferMatching 功能在 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

在 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 之类的标志,但没有任何乐趣。

关于如何解决这个问题的任何提示?

【问题讨论】:

    标签: xcode macos opencv computer-vision malloc


    【解决方案1】:

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

    对于 OpenCV 2.4.1,只需注释掉 delete 语句即可。 对于 OpenCV 2.4.13,我还必须注释掉两个 cvconfig.h 包含。

    【讨论】:

      猜你喜欢
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      相关资源
      最近更新 更多