开始毕设——matlab中使用opencv的利器mexopencv—mac os X篇[2013.11.25]

暑期去了实习,回来以后边找工作边玩,浪费了好些日子。暑期的部分在草稿箱存了一篇未完的,一直没心情补上,我觉得我都快不记得做了什么了

这几天开始要忙毕设了,做完就该毕业,然后就是工作。

研究算法,或者算不上研究,只是改进下然后做个测试的话在matlab会比较方便,于是着手开始装东西。

我的系统是mac os X 10.7.5。


首先是matlab。

我装了matlab2013a for mac&linux。安装很简单,双击ios,然后找到那个InstallForMacOSX.app,就有一个需要选择的选成without Internet,别的都是常规安装。序列号在serial文件夹下的readme里面有,激活文件也用那个文件夹下的就可以。似乎有点不道德,但贫苦大众为了科研。。。

装matlab很顺利,据说有人会报错,而且可以通过安装xcode解决,我原本就有xcode,因此没遇到这个错误。

我安装matlab的路径是/Applications/MATLAB_R2013a.app,因此下面涉及matlab路径都用了这个。


第二要装opencv。

opencv是因为mexopencv才需要的,需要安装2.4及以上版本。

1. 下载opencv for mac/linux 2.4.5,以及用于编译的cmake2.8,我选了cmake-2.8.12.1-Darwin64-universal.dmg

2. 把cmake装上,opencv解压成文件夹。

3. 终端进入opencv解压后的文件夹,输入以下命令。

mkdir release
cd release
cmake -G "Unix Makefiles" ..
make
sudo make install

此时,lib文件在“/usr/local/lib”文件夹,h文件在“/usr/local/include”。

*顺便附上xcode使用opencv的步骤。我的xcode最近没更新,4.2的,所以有的选项名称可能略会有不同。

1. 右键点击工程名称,有个add files to xxx,打开的对话框用Command + Shift + G 进到/usr/local/lib文件夹,最保险的是全选dylib,如果你知道用什么就对应选择需要的,而且后缀是是2.4.5.dylib就可以。

2.单击工程名称,Build Settings里面有Header Search Paths,加上/usr/local/include即可。


第三装mexopencv。

1. 如果没有pkg-config则先安装,在终端输入pkg-config就可以检测有有没有装过。安装的话输入以下命令即可。

curl http://pkgconfig.freedesktop.org/releases/pkg-config-0.28.tar.gz -o pkg-config-0.28.tar.gz
tar -xf pkg-config-0.28.tar.gz
cd pkg-config-0.28

./configure  --with-internal-glib
make
sudo  make install

2. 下载 mexopencv。可以用github,也可以直接下载。

3. 按照上面官方链接里的说明进行安装。进入mexopencv文件夹后命令如下。

3.1

make MATLABDIR=/Applications/MATLAB_R2013a.app


在这一步时我遇到了错误,指向/usr/local/include/opencv2/core/operations.hpp文件的CV_XADD函数,搜索了一下在http://answers.opencv.org/question/4432/what-caused-this-happencv_xadd-parse-issue-in/找到了解答。

就是

注释掉operations.hpp以下部分

#ifdef __cplusplus
/*
/// exchange-add operation for atomic operations on reference counters ///
#if defined __INTEL_COMPILER && !(defined WIN32 || defined _WIN32)   // atomic 
[...]
#else
  static inline int CV_XADD(int* addr, int delta)
  { int tmp = *addr; *addr += delta; return tmp; }
#endif
*/
添加以下代码
static inline int CV_XADD(int* addr, int delta)
{ int tmp = *addr; *addr += delta; return tmp; }
至下面代码后面
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable:4127) //conditional expression is constant
#endif

然后使用刚才那个make就好了.

3.2

使用下面命令进行测试。

make MATLABDIR=/Applications/MATLAB_R2013a.app test

不过其实我没通过这个测试,提示是Undefined variable "mexopencv" or class "mexopencv.root".我试过添加PATH,但是无效。

搜索只找到一个结果,https://github.com/kyamagu/mexopencv/issues/82,按这个说的我在matlab命令窗口输入addpath('/Users/baby/deve/mexopencv'),然后将mexopencv/samples下任意一个文件拖入matlab命令窗口或是输入run('/xxxxxx/mexopencv/samples/facedetect.m')之类的来运行,可以看到效果。


如果运行时出现了invalid mex file错误,那么极有可能像我一样是不同版本dylib冲突引起的。在matlab2013a中在目录/Applications/MATLAB_R2013a.app/bin/maci64中自带了opencv2.4.2的dylib,而我编译时用的是/usr/local/lib/中的opencv2.4.5。解决方案在http://stackoverflow.com/questions/19773916/compiling-mexopencv-in-os-x-10-9-with-xcode-5-and-matlab-r2013b有详细的说明。概括说是两种,一种是把/Applications/MATLAB_R2013a.app/bin/maci64中的libopencv_xxxx.dylib都重命名(例如在dylib后面加上.bak)或者是删除;二是用下面命令来启动matlab。

DYLD_INSERT_LIBRARIES=/usr/local/lib/libopencv_calib3d.2.4.5.dylib:/usr/local/lib/libopencv_highgui.2.4.5.dylib /Applications/MATLAB_R2013a.app/bin/matlab

其中方法一属于一劳永逸,缺点是如果在matlab还需要使用自带的opencv库时会有影响,方法二比较麻烦,但是一次写完以后都用复制粘贴或者写成脚本也还算方便。


3.3

生成文档我直接用了GUI的doxygen,源文件目录就是mexopencv下面那个doc文件夹。


至此,我的matlab已经可以使用mexopencv。3.2部分着实费了不少劲。光是opencv其实我装了三个版本,2.4.7,2.4.0和2.4.5,终于在2.4.5时成功了也就懒得改成最新的2.4.7。理论上应该是没有问题的。

接下去要好好写毕设了,还需要看一下mexopencv如何改写函数以测试算法效率。



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值