Matlab 版 (精华区)
发信人: fork (撒哈拉沙漠的沙), 信区: Matlab
标 题: m文件转c/c++,之image工具箱
发信站: BBS 哈工大紫丁香站 (Mon Mar 21 09:25:44 2005)
m文件转c/c++,之image工具箱
闲话少说,直接进入正题
下面是一个m文件,调用了image工具箱中的函数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function shen009()
I=imread('Lena.tif');
I=im2bw(I);
I1=bwmorph(I,'bridge');
figure,imshow(I1,[])
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
用我在《总结:m文件转化为c/c++语言文件,VC编译 》中
提到的方法将它转化为一个独立运行的程序:
mcc -B sglCpp shen009
(我想说明以下,我最终的目的不是要把它编译为一个独立
运行的程序,而是要将其嵌入到我的VC代码中,但每次先将
其编译为独立的运行程序看是否能够正常运行,再嵌入到VC
代码中是一种好习惯,这样会省下很多调试的麻烦)
这时生成了一个叫做shen009.exe的可执行文件,在命令行
下运行它,出现问题,提示为:
C:\MATLAB6p5\work\testimage>shen009
Exception! File: handler.cpp, Line: 73
Reference to unknown function 'checknargin' from FEVAL in stand-alone mode
.
它说明程序中引用了一个未知函数,搜索一下matlab的安装目录,我们在
C:\MATLAB6p5\toolbox\images\images\private
这个目录中找到了checknargin.m文件,(这是image工具
箱的目录)分析文件之后发现这个函数做了一些参数检查的工作。
为了让我们的程序能正常运行,我们在shen009.m中显式的调用该函数一次,变为:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function shen009()
checknargin(0,0,0,0)
I=imread('444.tif');
I=im2bw(I);
I1=bwmorph(I,'bridge');
figure,imshow(I1,[])
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
再编译,再运行,新的错误提示出现:
C:\MATLAB6p5\work\testimage>shen009
Exception! File: handler.cpp, Line: 73
Undefined function or variable 'checknargin'.
这次提示checknargin是一个未定义的函数,请注意“未知”和“未定义”的区别。
我们再来做一件事情,这件事情很有意思:
我们将checknargin.m拷贝一份到shen009.m所在的目录中。再编译,再运行。
新的错误:
C:\MATLAB6p5\work\testimage>shen009
Exception! File: handler.cpp, Line: 73
Reference to unknown function 'checkinput' from FEVAL in stand-alone mode.
这次checknargin的问题没有了,checkinput的问题又来了,这次知道该怎么做了吧:
在shen009.m中显式调用checknargin一次,让后将checknargin.m拷贝到shen009.m所
在目录。shen009.m变为这个样子:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function shen009()
checknargin(0,0,0,0)
checkinput(0,{'numeric' 'logical'},{'real' 'nonsparse' '2d'}, ...
mfilename, 'BW', 1)
I=imread('444.tif');
I=im2bw(I);
I1=bwmorph(I,'bridge');
figure,imshow(I1,[])
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
再编译,再运行,成功。
好了,剩下的事就是将其编译为一个动态链接库,加到VC中了,这方面请参考
我的《简化m文件转化为c/c++文件,VC编译》。
以后凡是碰到checknargin,checkinput的问题都可如此处理。
总结一下:
在涉及到image工具箱的中函数的转化时需做两件事:
1. 在m文件的首行加入如下两句:
checknargin(0,0,0,0)
checkinput(0,{'numeric' 'logical'},{'real' 'nonsparse' '2d'}, ...
mfilename, 'BW', 1)
2. 把checknargin.m,checkinput.m拷贝到待转化m文件所在目录。
--
段正游低声向范骅、华赫艮、巴天石诸人道:“这位萧大侠于我有救命之恩,待会危急
之际,咱们冲入人群,助他脱险。”范骅道:“是!”向拔刃相向的数千豪杰瞧了几眼,说
道:“对方人多,不知主公有何妙策?”段正淳摇摇头,说道:“大丈夫恩怨分明,尽力而
为,以死相报。”大理众士齐声道:“原当如此!”
※ 来源:·哈工大紫丁香 http://bbs.hit.edu.cn·[FROM: 202.102.144.36]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.678毫秒