iOS   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用Xcode 5和Matlab R2013b在OS X 10.9中编译mexopencv大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我有兴趣在我的系统上使用 Kota Yamaguchi’s mexopencv library,具有以下规格: > OS X 10.9(小牛队) > Xcode 5 > Matlab 2013b >通过macports将OpenCV安装到/ opt / local / include / {opencv,opencv2}和/ opt / local / lib 我git使用mexopencv网站上
@H_696_6@
@H_696_6@
我有兴趣在我的系统上使用 Kota Yamaguchi’s mexopencv library,具有以下规格:

> OS X 10.9(小牛队)
> Xcode 5
> Matlab 2013b
>通过macports将OpenCV安装到/ opt / local / include / {opencv,opencv2}和/ opt / local / lib

我git使用mexopencv网站上的命令克隆了最新的OpenCV版本;这是版本084838d62a25fcb3eec9f610abf91b167bc6c2f5从星期六七月20日05:18:37 2013 -0700.

我运行了Matlab的mex -setup命令,然后从Mathworks实现了this workaround,使用Xcode 5作为我的mex编译器.

我使用Matlab命令setenv(‘PATH’,[getenv(‘PATH’)’:/ opt / local / bin’])将macports的pkg-config命令添加到路径中;

现在,运行mxopencv.make会产生以下链接错误消息:

Undefined symbols for architecture x86_64:
  "cv::merge(std::vector<cv::Mat,std::allocator<cv::Mat> > const&,cv::_OutputArray const&)",referenced from:
      MxArray::toMat(int,bool) const in libMxArray.a(MxArray.o)
  "cv::split(cv::Mat const&,std::vector<cv::Mat,std::allocator<cv::Mat> >&)",referenced from:
      MxArray::MxArray(cv::Mat const&,mxClassID,bool) in libMxArray.a(MxArray.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command Failed with exit code 1 (use -v to see invocation)

    mex: link of ' "+cv/CamShift.mexmaci64"' Failed.

make: *** [+cv/CamShift.mexmaci64] Error 255

我不知道此时该做什么.是否可以在我的系统上构建mexopencv?

解决方法

我终于找到了我的问题,解决方案导致了其他问题,我最终能够解决.所以这里有一个完整的分步过程,我做了什么让mexopencv在我的系统上工作(一些步骤将从我原来的问题重复).

>从http://www.cs.sunysb.edu/~kyamagu/mexopencv/@L_546_14@mexopencv
>实现Mathworks workaround以使Matlab mex编译器与Xcode 5一起使用
>在Matlab中运行mex -setup
>@L_616_16@新创建的〜/ .matlab / R2013b / mexopts.sh文件,如下所示:

>将“-lstdc”的所有引用替换为“-lc”
>将以下参数添加到CXXFLAGS变量:“ – std = gnu 11 -stdlib = libc”.这两个步骤确保您使用C 11而不是C 98(感谢this stack overflow post).
>您应该已经使用前面的步骤中的“10.8”替换了文本“10.7”的所有实例
>改变线

@H_522_19@mLIBS =“ – L $TMW_ROOT / bin / $Arch -lmx -lmex -lmat”

@H_689_34@mLIBS="$TMW_ROOT/bin/$Arch/libmx.dylib $TMW_ROOT/bin/$Arch/libmex.dylib $TMW_ROOT/bin/$Arch/libmat.dylib"

这可以确保编译器不会在$TMW_ROOT / bin / $Arch中搜索OpenCV库,在我的系统上,它会计算到/Applications/MATLAB_R2013b.app/bin/maci64.无论出于何种原因,旧版本的OpenCV(2.4.2)中的库都带有Matlab并且存在于该文件夹中(可能它们带有计算机视觉系统工具箱). [注意:此步骤可能没有必要]
>创建一个文件夹/Applications/MATLAB_R2013b.app/bin/maci64/libopencv并将所有libopencv * .dylib文件从/Applications/MATLAB_R2013b.app/bin/maci64移动到该文件夹​​中.这可以防止链接器查找并意外链接到此旧版本的OpenCV.
>使用Matlab命令setenv(‘PATH’,[getenv(‘PATH’)’:/ opt / local / bin’])将macports的pkg-config命令添加到Matlab路径;为避免每次启动Matlab时都输入此命令,可以将其添加到startup.m文件中.我的生活在〜/ Documents / MATLAB / startup.m中.
>确保你运行mexopencv.make(‘clean’,truE);在Matlab中删除任何先前失败的编译mexopencv的尝试
>在Matlab中运行mexopencv.make;它应该正常工作(有一些警告),并在五分钟左右你将有@L_846_12@mEX编译版本的OpenCV;恭喜!但是你还没有完成.

我通过一个简单的单线测试试用了我的OpenCV安装:

imshow(cv.CAnny(rgb2gray(imread('peppers.png')),[10 100]))

我试图在此时运行它时,我收到以下错误消息:

>> imshow(cv.CAnny(rgb2gray(imread('peppers.png')),[10 100]));
Error using cv.CAnny
Invalid MEX-file '/Users/dgolden/software/cpp/mexopencv/+cv/CAnny.mexmaci64': dlopen(/Users/dgolden/software/cpp/mexopencv/+cv/CAnny.mexmaci64,6): Library not loaded:
/opt/local/lib/libtiff.5.dylib
  Referenced from: /opt/local/lib/libopencv_highgui.2.4.dylib
  Reason: Incompatible library version: libopencv_highgui.2.4.dylib requires version 8.0.0 or later,but libtiff.5.dylib provides version 6.0.0

问题是Matlab有自己版本的一些安装了macports的库,包含在/Applications/MATLAB_R2013b.app/bin/maci64中,与/ opt / local / lib中的库不同.认情况下,Matlab尝试动态链接自己的库版本,这些版本不是OpenCV期望的版本,因此程序不会运行.

在mexopencv附带的README.markdown文件中建议使用该解决方案.您需要告诉Matlab不要使用自己版本的共享库,而是使用/ opt / local / lib中的版本.

你可以用两种方法之一做到这一点.首先,尝试运行程序并记下产生错误的库的名称.然后,要么:

>在/Applications/MATLAB_R2013b.app/bin/maci64中找到库文件重命名或移动它.例如,将/Applications/MATLAB_R2013b.app/bin/maci64/libtiff.5.dylib重命名为/Applications/MATLAB_R2013b.app/bin/maci64/libtiff.5.dylib.bak.如果其他Matlab功能依赖于该库,则可能会产生意想不到的后果.您不需要做任何其他事情,以便OpenCV在/ opt / local / lib中找到正确的库.
>@L_735_48@matlab并首先通过设置DYLD_INSERT_LIBRARIES环境变量从命令行启动它,如:

DYLD_INSERT_LIBRARIES = / opt / local / lib / libtiff.5.dylib /Applications/MATLAB_R2013b.app/bin/matlab&

在我的情况下,在我用libtiff.5.dylib解决了问题后,我也遇到了libfreetype.6.dylib的问题,所以我将它添加到DYLD_INSERT_LIBRARIES变量中,如:

DYLD_INSERT_LIBRARIES = / opt / local / lib / libtiff.5.dylib:/opt/local/lib/libfreetype.6.dylib /Applications/MATLAB_R2013b.app/bin/matlab&

然后尝试再次运行您的程序.如果您遇到另一个库版本错误,请继续迭代并从/Applications/MATLAB_R2013b.app/bin/maci64重命名/移动库,或者将正确的库路径添加到DYLD_INSERT_LIBRARIES变量中.最终,它应该工作!

在我完成所有这些步骤之后,我能够成功运行我的Matlab命令:

imshow(cv.CAnny(rgb2gray(imread('peppers.png')),[10 100]))

让我知道这些步骤是否适合您,以及我是否跳过任何​​步骤或做出比以往更复杂的步骤.

我希望这可以帮助别人!我花了好几天时间梳理互联网并困扰着Kota,最终找到了正确的解决方案.

大佬总结

以上是大佬教程为你收集整理的使用Xcode 5和Matlab R2013b在OS X 10.9中编译mexopencv全部内容,希望文章能够帮你解决使用Xcode 5和Matlab R2013b在OS X 10.9中编译mexopencv所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
猜你在找的iOS相关文章