matlab jar包,Matlab 將m文件打包成jar包 (二)使用jar包

一、准備工作

1、在java工程文件夾(此處即desDesign)下新建lib文件夾,用於存放需引用的jar包:

449aaaf48f9ff2c2fc1c694fc08bbd7e.png

說明:

因為是matlab打包的jar包,需要依賴matlab中的相關函數,所以要將javabuilder.jar包帶上,路徑:D:\Program_software\MATLAB_R2014a\toolbox\javabuilder\jar\javabuilder.jar

二、實際使用

1、java工程中導入jar包:

工程文件夾右鍵——>Build Path——>Config Build Path——>Libraries——>Add Externel JARs——選擇jar包所在路徑——>確定

d7eb4dfe81d6c6c93fac0525bebcee50.png

2、在java文件中import JAR包並創建其中的類:

(1)、java文件導入包:import 包名.*;      此處即:import  BIQILibrary.*;

59579786046fa1d0f76104191a86761e.png

(2)、創建包中的類,如上圖。注意:

matlab生成的jar包中的類在創建時會可能出錯,會拋出MWException異常,即matlab工作異常,所以創建類時必須用try catch。

3、使用包中的類的對象的方法:

(1)、如圖。發現每個方法都有對應3個同名方法,每個方法的輸入輸出參數類型不是與對應的m文件中的function一一對應的,所以不能像matlab中那樣直接使用。

a0287b5c76e49a91f944b73417c49402.png

(2)、查看對應java文件,此處以返回Object[]的getNoiseGrayImg方法為例。打開matlab生成jar包時的fortesting文件夾下的包名文件夾下的對應java文件。如:

a2a77dd5e62593b2d9d151c1e3ee319e.png

(3)、用eclipse查看java文件中將使用的方法(此處即返回Objec[] 類型的getNoiseGrayImg)的說明:

先看下對應函數的m文件:

2ccb252ec5e28bffe03143a0aff30e03.png

對應生成的java文件中的函數:

266232d81c7e99a8e4c9c7db4e1e9dc5.png

解讀:

參數nargout:將返回的參數個數,m文件中返回了一個參數(noiseImg),所以調用時應該寫1;

參數rhs:給Matlab函數的輸入參數,m文件中定義為4個(srcImg、type、m、v);

函數返回值:一個包含nargout個返回參數的數組,注意為Object類型的數組;

MWException:調用該函數發生錯誤時的異常。

(4)、具體調用:

990bcfdb6e33781fc6d1a3638804d4b4.png

幾點說明:

第1、格式與java文件中說明一致,即返回類型為Object類型數組,里面存了該函數的返回結果;其次,參數列表為:返回值個數(因為matlab函數是可以同時返回多個結果的)、以逗號分隔的輸入參數列表;

第2、輸入參數必須要是matlab中具有的類型,如:uint8、uint16、double、int16、single。例如我開始使用的rgbImgData數組中的類型為int類型(32bit),運行時便提示了如下錯誤:

3eae4e36bfd8e1ed071fae1c71fbf07c.png

將數組rgbImgData聲明為short[][][]后,問題解決。short為2字節,相當於matlab中int16。

4、對應返回類型為void,但實際函數有返回值的方法,如上面第3步第(1)條圖中的第3個同名方法:void getNoiseGrayImg(Object[]  arg0,Object[]  arg1),其中參數arg0中存放了接受返回值的變量,arg1中存放了函數的輸入參數,如使用此方法可這樣調用達到與上面同樣的結果:

Object[] outputObj=new Object[1];//此函數只返回一個數據,所以返回列表數組outputObj中只有一個元素

outputObj[0]= outputImg;//outputImg為一個二維int或short型數組,用於實際接受返回圖片數據

Object[] inputObj=new Object[4];//函數有四個輸入參數

inputObj[0]=rgbImgData;//即第3步中第(4)小步的rgbImgData

inputObj[1]="salt & pepper";

inputObj[2]=0;

inputObj[3]=0.05;

//調用

AlgoBIQI.getNoiseGrayImg(outputObj,inputObj);

//調用后outputObj中的元素將接收到返回值

三、遇到的問題及解決方法

1、問題一:java工程中調用matlab生成的函數時,輸入類型必須是matlab中具有的類型

846437e55d58edfee34c0413702b6730.png

分析:使用了int類型(32bit)變量作為輸入參數,所以提示此錯誤

解決方法:

改為short類型(16bit,相當於matlab中int16)或double等。

2、問題二:調用matlab中的rgb2gray函數出現錯誤

651aeee7715283f6b5619af3e90a1259.png

分析:因為函數要輸入rgb圖像的數據,應該對應的是一個3維數組,但我一開始犯了錯,直接用了一個存儲了灰度值的二維數組作為輸入,所以出錯

解決方法:

使用三維數組,如:short[][][] rgbImgData=new short[][][3];每一像素點順序存儲R、G、B值。

3、問題三:不是內部或外部命令,也不是可運行的程序或批處理文件

a1bdb108fd81c31260ac86c29d4c9467.png

分析:首先,svm-scale與svm-predict為exe文件。此提示中包含兩個子問題:

子問題一:不是內外部命令,也不是可運行的程序或批處理文件。

分析:jdk配置錯誤時,cmd輸入java回車也會出現此提示,所以認定為需要將svm-scale.exe與svm-predict.exe所在目錄配置進環境變量。但實際配置好后,cmd雖然能輸入svm-scale與svm-predict回車便提示相關正確信息,但運行工程時還是出現同樣錯誤。

最終解決方法:

將svm-scale.exe與svm-predict.exe等工程需要調用的程序,直接放在工程根目錄下,此處即dspDesign文件夾下。(注:開始是放在自己建的lib文件夾下的)

子問題二:錯誤使用load 無法讀取文件‘output_blur’:沒有此類文件或目錄

分析:與上一問題相同,都是放置在lib目錄下的,所以程序無法直接讀取

解決方法:

移到工程根目錄下即可。

參考:http://www.ilovematlab.com/archiver/tid-37633.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值