如何使chamerMatching在OSX上运行? [英] How to get chamerMatching to work on OSX?

查看:88
本文介绍了如何使chamerMatching在OSX上运行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用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. 调试断言失败vc \ include \ vector向量迭代器+斜切匹配Opencv中的偏移量超出范围

在Ubuntu上,只需从源代码编译 OpenCV 2.4.1 并使用该技巧.

这在OSX上不起作用.我还注释了Matching析构函数中的模板删除:

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

但没有喜悦.

我什至尝试注释掉chamfermatching.cpp中的所有delete语句,但仍然出现相同的错误.

更新我尝试使用3个不同的g ++版本(4.9、5和6)重新编译OpenCV 2.4.1,但出现链接错误.这是使用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的标志,但并不高兴.

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

解决方案

尽管有漏洞,但OSX上有一个选项可用(即使在OpenCV 2.4.13中也是如此):删除已编译的.dylib并将未编译的contrib模块添加到项目中. /p>

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

I'm trying to use OpenCV's chamferMatching functionality to work on OSX, but getting an error about a failed attempt at freeing objects that weren't allocated (as far as I can tell):

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

I found few helpful posts like this two:

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

On Ubuntu, simply compiling OpenCV 2.4.1 from source and using that did the trick.

The same did not work on OSX though. I also commented out the templates deletion in the Matching destructor:

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

but no joy.

I even tried commenting out ALL the delete statements in chamfermatching.cpp, but I still get the same error.

Update I've tried recompiling OpenCV 2.4.1 with 3 different versions of g++: 4.9, 5 and 6, but I'm getting linking errors. Here's an example compiling with 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

I've tried adding flags like -std=c++11 then -std=c++0x, but no joy.

Any tips on how I could get over this issue ?

解决方案

Although hacky, one option worked on OSX (even with OpenCV 2.4.13): removing the compiled .dylib and adding the uncompiled contrib module to the project.

For OpenCV 2.4.1 there it was just a matter of commenting out delete statement. For OpenCV 2.4.13 I also had to comment out two cvconfig.h includes.

这篇关于如何使chamerMatching在OSX上运行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆