[转] Matlab与C++混合编程,添加OpenCV库

原文地址 峰回璐转

最近在做运动医学软件优化工作,此款软件框架及算法语言全由matlab实现,虽然matlab矩阵运算、数值计算能力强大,但速度让人难以忍 受。软件立刻移植到C++上又不太实际,故采用联合编程的方式,速度难以容忍的算法交给C++实现,C++在实现代码的过程中某些数值计算及图像处理算法 调opencv库函数。

  在网上有很多matlab编写mex函数调用opencv库的方法,但都不能直接拿来。经过一步步试验,修改,最终完成,现将过程及内容记录下来留给后来人参考。

  第一步: (参考参考资料1,但其写的不够详细,对于初学者难懂)实现matlab、c++、opencv混合编程的编译器配置以及链接库的自动配置。参考资料2的方法虽然可行,但每次程序开启都要手动重新配置,很麻烦。

  其实就是写了一个cppmake.m文件,它的功能类似于Makefile,实际上就实现了mex编译这个工程时候的编译规则。具体可以看后面的代码,然后就知道在里面做了什么了。

% This cppmake.m is for MATLAB
% Function: compile c++ files which rely on OpenCV for Matlab using mex
% Modified by Jessica
% Date    : 2014-9-10
% HomePage: http://www.cnblogs.com/lukylu/
% Email   : [email protected]

% Matlab and C++ mixed programming(dependent on opencv library)
% First step(before exeuting this program): use "mex -setup" to choose your c/c++ compiler
clear all;

% Get the architecture of this computer
is_64bit = strcmp(computer,‘MACI64‘) || strcmp(computer,‘GLNXA64‘) || strcmp(computer,‘PCWIN64‘);

%----------------------------------------------------------------------------------------------
%% The configuration of compiler
% You need to modify this configuration according to your own path of OpenCV
% Notice: if your system is 64bit, your OpenCV must be 64bit!
out_dir=‘./‘;
CPPFLAGS = ‘ -O -DNDEBUG -I.\ -IF:\opencv\build\include -IF:\opencv\build\include\opencv -IF:\opencv\build\include\opencv2‘; % your OpenCV "include" path
LDFLAGS = ‘ -LF:\opencv\build\x86\vc10\lib‘;                       % your OpenCV "lib" path
%LIBS = ‘ -lopencv_calib3d249d -lopencv_contrib249d -lopencv_core249d -lopencv_features2d249d -lopencv_flann249d -lopencv_gpu249d -lopencv_highgui249d -lopencv_imgproc249d -lopencv_legacy249d -lopencv_ml249d -lopencv_nonfree249d -lopencv_objdetect249d -lopencv_photo249d -lopencv_stitching249d -lopencv_ts249d -lopencv_video249d -lopencv_videostab249d‘;
LIBS = ‘ -lopencv_calib3d249 -lopencv_contrib249 -lopencv_core249 -lopencv_features2d249 -lopencv_flann249 -lopencv_gpu249 -lopencv_highgui249 -lopencv_imgproc249 -lopencv_legacy249 -lopencv_ml249 -lopencv_nonfree249 -lopencv_objdetect249 -lopencv_photo249 -lopencv_stitching249 -lopencv_ts249 -lopencv_video249 -lopencv_videostab249‘;
if is_64bit
    CPPFLAGS = [CPPFLAGS ‘ -largeArrayDims‘];
end  

% add your files here!!
compile_files = {
    %the list of your code files which need to be compiled
    ‘ImageCalibration.cpp‘
    };
%---------------------------------------------------------------------------------------------- 

%----------------------------------------------------------------------------------------------
%% compiling
for k = 1 : length(compile_files)
    str = compile_files{k};
    fprintf(‘compilation of: %s\n‘, str);
    str = [str ‘ -outdir ‘ out_dir CPPFLAGS LDFLAGS LIBS];
    args = regexp(str, ‘\s+‘, ‘split‘);
    mex(args{:});
end
fprintf(‘Congratulations, compilation successful!!!\n‘);
%----------------------------------------------------------------------------------------------

  注意:在调用此cppmake.m文件前要先选择编译器,使用mex -setup指令。

   第21行为配置opencv的include path,对于高版本的opencv有3个include,-I后面填入你电脑所装的opencv的include路径,多个路径之间使用空格符即‘ ‘各开。例如我电脑opencv装在F盘,故我的路径是F:\opencv\build\include。。。。。

  第22行为配置opencv的lib库的路径使用-L开头。第23、24行为添加opencv dll库的名字,-l开头,不同库之间用空格隔开。

  第25-27行,64位系统需要。

  在32行处加入你所要编译的mex函数的文件名称。ok,第一步完成,直接运行此m文件即可完成配置、编译。

  第二步:参考其他Matlab与C++混合编程的编写mex函数的方法即可。

   赶时间,先写到这,后面再补充。

四、参考资料

[1] Matlab与C++混合编程(依赖OpenCV库)

[2] matlab 调用opencv函数方法及matlab编译c++程序

[3] matlab用mex编译cpp文件

时间: 2024-07-31 14:33:09

[转] Matlab与C++混合编程,添加OpenCV库的相关文章

Matlab与C++混合编程,添加OpenCV库

最近在做运动医学软件优化工作,此款软件框架及算法语言全由matlab实现,虽然matlab矩阵运算.数值计算能力强大,但速度让人难以忍受.软件立刻移植到C++上又不太实际,故采用联合编程的方式,速度难以容忍的算法交给C++实现,C++在实现代码的过程中某些数值计算及图像处理算法调opencv库函数. 在网上有很多matlab编写mex函数调用opencv库的方法,但都不能直接拿来.经过一步步试验,修改,最终完成,现将过程及内容记录下来留给后来人参考. 第一步: (参考参考资料1,但其写的不够详细

[转] Matlab与C++混合编程(依赖OpenCV)

作者 [email protected],原文 Matlab与C++混合编程(依赖OpenCV) 之前在运行别人论文的代码的时候,经常有遇到Matlab与C++混合编程的影子.实际上就是通过Matlab的Mex工具将C++的代码编译成 Matlab支持调用的可执行文件和函数接口.这样一方面可以在Matlab中利用已经编写好的函数,尽管这个函数是用C++编写的.实现了交流无国界, 没有江山一统的谁,只有四海之内皆兄弟的豪气.另一方面,取C++所长补己之短.Matlab擅长矩阵运算,但对循环操作的效

matlab与vs混合编程/matlab移植

前言 项目算法中包含了不同编译工具的代码,分别是matlab和VS,需要将二者结合起来,统一在同一个系统工作,此时就要用到matlab和vs混合编程. 在matlab中将.m文件编译生成库文件等供外部的vs程序调用,实现混合编程. 实现步骤 1.matlab中算法代码编译生成库文件.头文件等: 2.创建并配置VS工程: 3.安装配置MCR方便软件移植: 实现环境 matlab版本:matlab2015a vs版本:vs2013 PC系统:win7_x64 实现过程 1.matlab中算法代码编译

Matlab与.NET混合编程解决人脸识别问题

原文:[原创]Matlab与.NET混合编程解决人脸识别问题 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标. [原创分享]Matlab.NET混编调用Figure窗体 http://www.cnblogs.com/asxinyu/archive/2013/04/14/3020813.html [原创]Matlab与.NET基于类型安全的接口编程入门 http://www.cnblogs.com/asxinyu/archive/2013/05/16/3082299.ht

【目录】Matlab和C#混合编程文章目录

本博客所有文章分类的总目录链接:http://www.cnblogs.com/asxinyu/p/4288836.html 1.Matlab和C#混合编程文章目录 1.国内第一部C#.Net调用Matlab进行混合编程的视频教程[彻底免费无注册码] 2.国内第一部Matlab和C#.Net混合编程入门级视频教程[完全免费]  3.[原创]Matlab与.NET混编解决人脸识别问题  4.[原创]Matlab与.NET基于类型安全的接口编程入门   5.[原创]Matlab.NET混编调用Figu

matlab和C/C++混合编程--调用opencv

最近的我们已经将整个项目搭起来了,项目比较复杂.由于我们做的是检索系统,所以我们用asp.net(c#)做了网页,但是算法的实现是在matlab下,所以我们不得不用matlab生成动态链接库dll,然后用c#调用matlab,单单这个配置问题就搞了我们一个多星期,不过还是顺利解决了,解决方法以后有时间再写个博客出来. 虽然我们整个项目已经能在c#下跑通了,但是检索效果真不理想,检查各种可能出现问题的地方,首先自然是特征的问题.我们做的是偏图像的检索,有些现成的特征提取算法是在opencv下实现的

matlab 2012 vs2010混合编程

电脑配置: 操作系统:window 8.1 Matlab 2012a安装路径:D:\Program Files\MATLAB\R2012a VS2010 : OpenCV 2.4.3:D:\Program Files\opencv 补充说明: 在配置前,先检查一下系统变量: 1.若缺少系统变量(该路径必须添加!!!): D:\Program Files\MATLAB\R2012a\runtime\win64 导致结果:程序无法正常启动0x000007b.请单击“确定”关闭应用程序 注意变量配置后

Matlab与Java混合编程的教程

许多方面我们用到了MATLAB的强大数学计算能力,也同时JAVA语言是现今使用最多的编程语言.现在的Android也同样使用JAVA语言来实现. 下面我就如何进行混合编程做了一下步骤. 第一步:当然是安装好MATLAB程序和JDK,我是用的MATLAB版本是R2013a, JDK是版本1.7:同时使用eclipse开发工具作为编写java的的开发工具. 第二步:在MATLAB中编写一个FUNCTION函数,如下: 第三步:在MATLAB中使用deploytool命令,来进行打包.如下: 第四步:

VC调用matlab dll方式混合编程(c风格--例2)<二>

VC与Matlab混合编程之调用动态链接库dll--<二> 1.是先建立 matlab 的 m 文件. ellipsefit.m 其包含:function [Xc,Yc,A,B,Phi,P]=ellipsefit(x,y) 2.MCC命令编译生成得到h.dll.lib等文件 在matlab命令行中输入: mcc -B csharedlib:ellipsefit ellipsefit.m (此方式为c风格函数) (具体命令含义可参考<精通matlab与C/C++混合程序设计>刘维,第