概述
文章目录
- 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});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
function 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使用
end
close(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');
end
function Numbers_Callback(hObject, eventdata, handles)
function Numbers_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function 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 reset
global 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
end
function 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
,转换过程如下:
- 1,使用如下功能进行转换;
- 2,输入需要被转换的方法(如果该方法,还调用了其他方法,也只用填写这个主方法即可);
- 3,输入测试用例方法(自动检测的数据类型,需要根据需要更改);
例如在另一个例子中,如果使用了自动检测的,就会爆出如下的错误:
这是改写前的数据类型:
这是改写后的数据类型:
- 4,检测生成的c++代码;
5,选择生成的类型、语言、工具链,,Mores Setting可以设置配置的硬件;
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';
end
Result1{1} = 'rank 1';
for i=2:length(indexc)+1
Result1{i}=data1{indexc(i-1)};
end
用生成c++代码时,用到的一些Matlab方法
3 实例
图像显示
矩阵信息显示
后续补充
最后
以上就是甜蜜大门为你收集整理的Matlab转C++代码入门————附带详细代码和示例1 转换2 注意事项3 实例的全部内容,希望文章能够帮你解决Matlab转C++代码入门————附带详细代码和示例1 转换2 注意事项3 实例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复