JAVA基础知识记录--ujmp矩阵库的导入何使用&java引用opencv和javacv变量名冲突问题

JAVA 专栏收录该内容
2 篇文章 0 订阅

Android项目中加载java计算矩阵的库ujmp

一、导入ujmp库

  1. 在GazeTracking的build.gradle中的maven连接国内的阿里仓库

maven {

            url "https://maven.aliyun.com/repository/public"

        }

 

  1. 在app的build.gradle中dependencies引用包:

implementation group: 'org.ujmp', name: 'ujmp-core', version: '0.3.0'

 

配置好以后同步就会自动从云仓库下载对应的库文件。

3.在项目java代码中import即可:

import org.junit.Test;

import org.ujmp.core.DenseMatrix;

import org.ujmp.core.Matrix;

 

  • ujmp库的常用API

矩阵的简单使用参考博客:

https://blog.csdn.net/weixin_43840701/article/details/106909809

https://blog.csdn.net/yushengpeng/article/details/79068931

https://www.cnblogs.com/altlb/p/6872453.html

//创建3×3全零矩阵

        Matrix m = DenseMatrix.Factory.zeros(3, 3);

//修改元素serAsDouble(value,i,j)

        m.setAsDouble(1, 0, 0);

        m.setAsDouble(2, 0, 1);

        m.setAsDouble(3, 0, 2);

        m.setAsDouble(1, 1, 0);

        m.setAsDouble(3, 1, 1);

        m.setAsDouble(2, 1, 2);

        m.setAsDouble(3, 2, 0);

        m.setAsDouble(2, 2, 1);

        m.setAsDouble(2, 2, 2);

//矩阵的转置

        Matrix transpose = m.transpose();

//矩阵的求和

        Matrix sum = m.plus(transpose);

//矩阵的相减

        Matrix minus = m.minus(transpose);

//矩阵的乘法

        Matrix product = m.mtimes(transpose);

//矩阵的数乘

        Matrix scaled = m.times(2.0);

//矩阵的逆

        Matrix inv = m.inv();

//矩阵的伪逆

        Matrix inv = m.pinv();

//方阵的行列式

        double det = m.det();

 

//获取矩阵的行数与列数

        int i = (int) m.getRowCount();

        int j = (int) m.getColumnCount();

 

//数组转矩阵

        int[][] a = {

                {1, 2, 3},

                {4, 5, 6},

                {7, 8, 9},

        };

        Matrix arr = DenseMatrix.Factory.importFromArray(a);

//矩阵特征值

        Matrix[] eigenValue = m.eig();

//矩阵LU分解

        Matrix[] decompose = m.lu();

//创造m*n随机矩阵

        Matrix randMat = Matrix.Factory.rand(3, 4);

// 选取行selectRows(Ret,i) Ret.NEW为深拷贝 Ret.LINK为浅拷贝

        Matrix row = m.selectRows(Calculation.Ret.NEW, 0);

// 选取列

        Matrix column = m.selectColumns(Calculation.Ret.NEW, 0);

// 按第j列进行排序sortrows(Calculation.Ret.NEW, j, boolean)

        Matrix order = m.sortrows(Calculation.Ret.NEW, 1, false);

// 将矩阵的所有数值相加得到的返回值

        double accumulation = m.getValueSum();

 

 

 

Java怎么使用两种包

比如需要同时使用javacv和opencv,在代码中这样import:

import org.bytedeco.javacv.AndroidFrameConverter;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.FrameGrabber;
import org.bytedeco.javacv.OpenCVFrameConverter;
import org.bytedeco.opencv.opencv_core.IplImage;
import org.bytedeco.opencv.opencv_core.Point;
import org.bytedeco.opencv.opencv_core.Scalar;

import com.tre.libs.images.ImageUtil;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.opencv.android.Utils;
import org.opencv.core.Mat;

import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.ujmp.core.DenseMatrix;
import org.ujmp.core.Matrix;

 

import了javacv的Scalar函数,没有引Mat函数。

import了opencv里的Mat函数,而没有引Scalar函数。

这样做的时候我出现了严重的不匹配问题:

当这样定义一个Mat 的时候,Mat是import来自opencv,Scalar本应该也是opencv的函数。但是自己代码中import的是javacv中的Scalar函数,这样就会导致一个函数类型不对的报错问题。

 

当没有import org.opencv.core.Scalar时,想要使用opencv的Scalar函数,就需要在使用时直接写全包名,否则就会有重名的错误。

Mat tempMat_wp = new Mat(frame0.imageHeight, frame0.imageWidth, CV_8UC4, new org.opencv.core.Scalar(255,255,255,1));

 

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值