Matlab转C++代码入门————附带详细代码和示例

网友投稿 1037 2022-08-30

Matlab转C++代码入门————附带详细代码和示例

Matlab转C++代码入门————附带详细代码和示例

文章目录

​​1 转换​​

​​1.1 转换例子​​​​1.2 详细转换过程​​

​​2 注意事项​​​​3 实例​​

1 转换

一般Matlab中的代码,有一部分方法是无法转换成C++的,例如图像化UI、文件写出等接口。一般做转换的话,需要把业务逻辑从界面中抽取出来,去除与界面相关的代码,把需要显示的值,作为函数的返回值。

1.1 转换例子

例如下面的例子,可以从中提取主要的业务逻辑代码:

提取前的源代码:

function varargout = untitled(varargin)gui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @untitled_OpeningFcn, ... 'gui_OutputFcn', @untitled_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []);if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1});endif nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});else gui_mainfcn(gui_State, varargin{:});endfunction untitled_OpeningFcn(hObject, eventdata, handles, varargin)set(handles.Dimension,'String',''); % 属性纬度set(handles.Numbers,'String',''); % 对象个数set(handles.Clusters,'String',''); % 训练准确率set(handles.RecNum,'String',''); % 识别对象handles.output = hObject;guidata(hObject, handles);function varargout = untitled_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;% 载入数据function Load_Callback(hObject, eventdata, handles)% 数据载入控制global Myfig;global Convfig;global TrFig;load('Fig.mat');load('Oliver.mat');bar = waitbar(0,'读取数据中...');for i=1:100 str=['训练中...',num2str(100*i/100),'%']; % 百分比形式显示处理进程,不需要删掉这行代码就行 waitbar(i/100,bar,str) % 更新进度条bar,配合bar使用endclose(bar); Myfig = gRGB;Convfig = gRGB1;TrFig = gRGB2;% data1 = Data1;set(handles.Dimension,'String',num2str(size(FigData,2))); % 属性维度set(handles.Numbers,'String',num2str(size(FigData,1))); % 对象个数set(handles.Clusters,'String',[num2str(85.50),'%']);function Exit_Callback(hObject, eventdata, handles)delete(handles.figure1);close all;function Iteration_Callback(hObject, eventdata, handles)function Dimension_Callback(hObject, eventdata, handles)function Dimension_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');endfunction Numbers_Callback(hObject, eventdata, handles)function Numbers_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');endfunction Clusters_Callback(hObject, eventdata, handles)function Clusters_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');end% 展示图片function Perform_Callback(hObject, eventdata, handles)cla resetglobal Myfig;global Convfig;global TrFig;Cope = get(handles.RecNum,'String'); if isempty(Cope) pause(0.25); h=msgbox('请先选择识别对象(1-400)'); uiwait(h,5); else TotG=uint8(Convfig{str2num(Cope)}); % 原始模型 axes(handles.Net); imshow(TotG) hold on axes(handles.ObjFunction); TotG1=uint8(Myfig{str2num(Cope)}); % 改进模型 imshow(TotG1) axes(handles.axes4); TotG2=uint8(TrFig{str2num(Cope)}); % 待检测模型 imshow(TotG2) hold off endfunction RecNum_Callback(hObject, eventdata, handles)function RecNum_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white');end

提取后的代码:

function [TotG, TotG1, TotG2]=t2(Cope)oliver = coder.load('Oliver.mat'); Myfig = oliver.gRGB;Convfig = oliver.gRGB1;TrFig = oliver.gRGB2;TotG=uint8(Convfig{Cope});TotG1=uint8(Myfig{Cope});TotG2=uint8(TrFig{Cope});

用于测试的示例代码:

clear all;clc;close all;[TotG, TotG1, TotG2]=dealImage(3);

1.2 详细转换过程

这里转换用的​​MATLAB Coder​​,转换过程如下:

例如在另一个例子中,如果使用了自动检测的,就会爆出如下的错误:

这是改写前的数据类型:

这是改写后的数据类型:

2 注意事项

​​用于生成c++代码的matlab代码,要需要做一些改写。​​例如,预先定义变量。

这是原始版本:

indexc = find(Label==iii(1));indexc = indexc(c);Result1{1} = 'rank 1';for i=2:length(indexc)+1 Result1{i}=data1{indexc(i-1)};end

这是改写后的版本:

Result1 = cell(dataSize,1);dataSize=size(data,1); for i=1:dataSize Result1{i}='000';endResult1{1} = 'rank 1';for i=2:length(indexc)+1 Result1{i}=data1{indexc(i-1)};end

​​用生成c++代码时,用到的一些Matlab方法​​

3 实例

​​图像显示​​

​​矩阵信息显示​​

后续补充

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:DM8读写分离集群配置
下一篇:Install Update(Patches) on ESXi
相关文章

 发表评论

暂时没有评论,来抢沙发吧~