栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Matlab coder生成C++代码

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Matlab coder生成C++代码

Matlab coder生成C++代码 VS环境下运行
  • 背景介绍
  • Matlab脚本生成
    • 测试代码
    • Image Region Analyzer
    • 函数封装
    • Matlab Coder
  • 总结

背景介绍

本次使用Matlab工具Matlab coder 将Matlab下开发的代码转化为C++环境下代码,用于后续项目的开发,本次只是做一个简单的过程记录,内容仅供参考,有错误之处还望指出。

Matlab脚本生成

在图像处理的过程中,我们需要对识别对象的一些特征进行分析与处理,本次使用Matlab工具集中的Image Region Analyzer用于特征的分析与处理:
在这里我们使用一个测试图片

首先我们需要对这张图片进行一些处理,虽然这张图看上去只有黑白两色,但其本质是三通道的彩图需要将其转化为灰度图进行后续的处理。在Matlab中处理过程如下:

  1. 图片信息读取 ;
  2. rgb2gray 彩图转灰度(如是灰度图该步可省略);
  3. imbinarize 二值化;
  4. imshow 显示;
测试代码
%获取原始图片
Im_Input = imread('Test_Fig.jpg');
%彩图转灰度图
Im_Input_Gray = rgb2gray(Im_Input);
%二值化
BW = ~imbinarize(Im_Input_Gray);
%显示二值化之后的图片
imshow(BW);

运行完之后得到结果图

在二值化过程中,我们将我们关注的区域设置为白色,其他区域设置为黑色,此处根据需求自主进行调整即可。

我们得到三组变量,其中BW为我们本次主要处理的对象,其在Matlab中类型属于逻辑变量即非0则1。

Image Region Analyzer

在得到二值化图像之后,我们利用Matlab中Image Region Analyzer对区域的特征进行进一步的分析。

点击Load Image From Workspace 选择BW进行下一步分析;

点击OK


我们会得到四个区域,鼠标点击表格对应参数左边图片区域即可高亮,我们也可以选择更多的区域特征进行后续分析

在Filter中我们可以设置特征范围进行对应筛选,可以是面积、欧拉角等特征。

在Choose Properties模块中我们可以选择更多的特征,点击此处可以查看这些特征的具体的物理含义,本文中不过多赘述。

设置完成后,我们可以通过导出函数的方式,将目前的筛选过程生成脚本文件。

以最基础版的函数为例,我们用于生成C++代码。

函数封装

function [properties] = CSDN_Code()
%获取原始图片
Im_Input = imread('Test_Fig.jpg');
%彩图转灰度图
Im_Input_Gray = rgb2gray(Im_Input);
%二值化
BW = ~imbinarize(Im_Input_Gray);
%显示二值化之后的图片
imshow(BW);
%调用特征提取函数
properties = regionprops(BW_out,'Area','Eccentricity','EquivDiameter', 'EulerNumber', 'MajorAxisLength', 'MinorAxisLength', 'Orientation', 'Perimeter');

简单的封装成函数形式即可。

Matlab Coder


进入界面后点击三个小点选择对应的函数文件,切记一定是函数脚本,完成后选择项目存放路径,点击Next即可

可能会出现不支持的警告,这是由于一些函数在Matlab中不支持Matlab Coder转化所导致的,一般通过Help 查看函数手册,其最后都会说明是否支持Matlab Coder。
本次使用过程中imshow()函数不支持转化,注释即可,不影响功能。
修改无误后点击Next选择函数的输入信息,可手动选择也可自动匹配,本次无输入信息,直接跳过该步骤即可,

选择需要转换的代码进行测试即可

运行无法通过会进行提示,本次在修改代码过程中,未对变量名称进行统一导致编译失败,修改名称即可。

如上图所示则编译无误,可以进行代码生成工作。

可根据个人需求进行设置的调整,本次由于功能简单,涉及内容相对较少,我将所有的功能函数放在一个文件内,可根据需求独立生成C++文件。设置完成后点击Next即可。

对输出语言与编译环境进行简单配置,根据需求自行修改即可,本次使用VS2017为例,点击Generate等待完成即可。

等待片刻后即可生成完成。
将对应的.cpp文件与.h文件可以单独拎出来,在VS中新建空项目补充即可,在运行过程中可能会出现部分头文件缺失,该类头文件属于Matlab自带的一些.h文件,在Matlab安装目录下查找对应文件,并将其复制到工程目录下即可完成编译。

总结

至此完成Matlab代码到C++代码的转换,如有需求,在Matlab代码设计之初,我们需要尽可能多的去考虑那些函数支持转换,那些函数不支持转换,以及编程风格,最好提前为各个变量类型与大小进行定义,避免一些未知的错误。测试代码点击自取

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018418.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号