本博客转载自http://blog.csdn.net/wengdada/article/details/52017274
主要过程:利用MATLAB的Compiler工具将MATLAB函数编译成.jar文件,在Eclipse中实现对.jar文件中函数的调用,以此实现MATLAB和JAVA的混合编程。
1.环境配置要求:运行机器上必须装有JRE并且版本要和MatLab(Matlab这里用的是2016b版本)自带的JRE版本保持一致。在Matlabd的Command Windows中输入【version -java】以及打开cmd 分别输入命令【java -version】和【javac -version】分别验证编译和运行版本。
2.在Matlab中新建一个函数文件,编写需打包成.jar到的Matlab函数并保存,这里以一个rgbtogray()函数为例。
代码如下:
%函数功能:rgbtogray()这个函数将D:\matlab_java_test\目录下的所有.jpg文件转化为灰度图,
%并且显示出来,之后将得到的灰度图改名存放在原来的目录下
%status:函数返回值,若成功处理图片,放回SUCCESS;
%file_path:输入参数,要处理的图片所在的路径
img_path_list = dir(strcat(file_path,'*.jpg'));%获取该文件夹中所有jpg格式的图像
photo_num = length(img_path_list);%获取该文件夹中所有jpg格式的图像的数量
disp('The number of pictures ');
fprintf('%d \n',photo_num);% 显示图像数量
if photo_num > 0 %.jpg的图像存在
for j = 1:photo_num image_name = img_path_list(j).name;% 图像名
image = imread(strcat(file_path,image_name));
Image = rgb2gray(image);%调用matlab原有函数将图片转化为灰度图
imshow(Image);
imwrite(Image,strcat('D:\matlab_java_test\new',image_name,'.jpg'));%保存图片
pause(2);%暂停两秒,用来显示图像
end
close all; %由于出来好多个figure,一键关闭
status = 'SUCCESS';
end
end```
***
3.在Matlab下选择应用程序,使用Library Compiler工具得到Matlab函数的.jar文件。打开Library Compiler工具后,选择Java Package,再点击+号,选择要打包的.m文件,填写修改相关的信息,红框4显示的是打包成.jar文件后里面包含的类以及方法的名称,信息可以根据自己需要更改,最后单击Package。生成的文件我存放在D盘下,可以看到有四个主要的部分,for_redistribution文件,for_redistribution_files_only文件,for_testing文件以及PackagingLog.txt。
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2761157-5920fa85ba601706.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2761157-35e6a8627d61962e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2761157-32f3533ddc62d9cf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
-for_redistribution包含用于安装应用程序和MATLAB Runtime的文件,可以将这份文件复制到没有安装Matlab的电脑上,安装该文件,在安装过程中会提示要安装独立的共享库MATLAB Runtime,安装之后不需要Matlab也可以运行编译后的Matlab的程序或者元件(The MATLAB Runtime is a standalone set of shared libraries that enables the execution of compiled MATLAB applications or components on computers that do not have MATLAB installed)。
-for_redistribution_files_only文件夹包含应用程序的重新发布所需的文件。这些文件可以分发到那些有MATLAB或者有 MATLAB Runtime 的用户的电脑上。
-for_testing文件夹包含创建的所有由MCC创建的文件,像二进制文件和jar,头和源文件,使用这些文件来测试安装。 -PackagingLog.txt是由编译器生成的日志文件。 如果.jar库中的内容不熟悉也可以找到doc下的html文件夹,打开index.html,里面有Javadoc参考资料。
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2761157-d01df2cc7ed18445.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2761157-d687249cfd1a1106.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
***
4.打开Eclipse,新建一个Java Project,命名为TestMatlab,新建一个类命名为Test,然后把生成的.jar文件(如rgbtogray.jar)复制到该工程下,除此之外,还要将另外一个.jar文件复制到该工程下,该文件是javabuilder.jar,在<mcr_root>*\toolbox\javabuilder\jar\win64\javabuilder.jar目录下可以找到,<mcr_root>*是MATLAB的安装目录或者MATLAB Runtime的安装目录,这两个目录下均可以找到toolbox\javabuilder\jar\win64\javabuilder.jar。将.jar文件复制到TestMatlab工程下之后,选中该工程,单击file,选择Properties,选择Java Build Path,选择Libraries,选择ADD JARs,再将需要的.jar添加进去。
![](http://upload-images.jianshu.io/upload_images/2761157-0fd31b1db0131de8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
***
5.编写Java测试代码,代码如下:
import com.mathworks.toolbox.javabuilder.MWException;
import rgbtogray.RgbtoGray;
//status :函数返回值存放于status
//status = matlab.rgbtogray(1,"D:\matlab_java_test\")
//1代表原来函数需要的参数个数为1
//"D:\matlab_java_test\"代表原来函数中的file_path参数
public class Test {
public static void main(String[] args) { // TODO Auto-generated method stub
try { RgbtoGray matlab = new RgbtoGray();
Object[] status ;
status = matlab.rgbtogray(1,"D:\matlab_java_test\");
for(Object i:status)
System.out.println(i);
} catch (MWException e) { // TODO Auto-generated catch block
e.printStackTrace();
}//这里RgbtoGray matlab = new RgbtoGray()时需要抛出异常
RgbtoGray.disposeAllInstances();
}
}```
5.运行结果:可以看到函数成功地调用了Matlab函数,将图像灰度化,并且函数执行完之后成功返回了SUCCESS.