m文件转c/c++,之image工具箱

本文介绍将调用image工具箱函数的m文件转化为C/C++语言文件并嵌入VC代码的过程。转化为独立运行程序时出现引用未知函数等问题,通过在m文件中显式调用相关函数、将对应m文件拷贝到待转化m文件所在目录解决,最后可编译为动态链接库加到VC中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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文件所在目录。
   
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值