混合编程---c++调用matlab生成的dll----findCircles的应用

最近有个任务要对如下图找其中的圆圈,在opencv上面使用cvHoughCircles效果很不好,所以在matlab下试了下imfindcircles函数,发现效果非常的好啊,之前老师提到说图中下半部分有些圆中间的噪声特别多,导致找不到,不过在matlab强大的找圆能力下,这些噪声都是小意思啦大笑



所以问题便转为怎么在c++中调用matlab了,我选择的是matlab生成动态链接库dll的方式。

matlab生成dll

这里最重要的就是选对自己使用的平台工具,要不在vs中Initialize是会出错的。
我选用的编程平台是matlab2012a+vs2010。

在命令行中首先输入mex –setp




在命令行中输入mbuild  -setup


之后便是生成dll了,输入命令

mcc –W cpplib:findCircles –T link:lib findCircles.m –C

这个时候要等一小段时间让它慢慢生成啦。Be patient!吐舌头

findCircles是接下来要生成的dll的前缀名,会生成findCircles.dll。

findCircles.m是使用的.m文件名。

注意-C选项必须要的,不然生成的文件中会少掉一个很重要的.ctf文件哦。

如下图所示,背景为蓝色的四个文件便是我们需要使用的文件啦。


使用的findCircle.m中必须是一个函数文件

function [number, centers, radius] = findCircles(img, Rmin, Rmax)
[centers, radius] = imfindcircles(img,[Rmin Rmax],'ObjectPolarity','dark');
number = size(radius, 1);
end
函数很简单,只是简单的调用了一下imfindcircles函数,不过要好好设计一下输入输出参数,这里我便添加了一个输出number值记录得到的centers的个数。

因为在c++中调用此函数的时候输出是一系列的指针,我们要事先为输出分配好空间,然后把这些指针指向的值复制到输出空间中去,所以要知道要动态申请多少空间,就必须要知道函数得到了多少个centers,所以就加了个number输出。

C++中的调用

dll等文件的放置

首先我们生成一个vs2010C++工程,起名就叫Finding吧,之后新建一个main.cpp文件。
那findCircle.dll等四个文件放在工程的哪里呢? 放到代码所在的文件夹中。
之后添加包含目录和库目录。
右键点击方案名Finding,选择最下面的属性
打开之后选择VC++目录,要修改的是包含目录和库目录。
我添加的包含目录是

D:\MATLAB\R2012a\extern\include

C:\opencv2.4\opencv\build\include\opencv

C:\opencv2.4\opencv\build\include\opencv2

C:\opencv2.4\opencv\build\include

注意,opencv中的3个都需要添加的哦!
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值