java 对图形矩阵进行升维和降维

package com.mro.imageDeal.utility;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.springframework.stereotype.Component;

import java.io.File;
import java.util.HashMap;

/**
 *
 * 对接TensorFlow帮助类
 *
 * @author zy
 * Created 2021/8/21 15:43
 */
@Component
public class ImageHelper {
    public static String getImageData(String file){
        try {
            //导入opencv.dll文件
            String dir = new File(".").getCanonicalPath();
            System.load(dir+"/opencv/x64/opencv_java452.dll");
            //读取图片矩阵数据
            Mat mat = Imgcodecs.imread(file);
            int width =  (int)mat.size().width;
            int height = (int)mat.size().height;
            //初始化4维矩阵
            double[][][][] matData = new double[1][height][width][3];
            //升维
            for (int i=0;i<mat.size().height;i++){
                for (int j=0;j<mat.size().width;j++){
                    matData[0][i][j] = mat.get(i,j);
                };
            };
            HashMap<String,Object> param = new HashMap<>();
            param.put("signature_name","serving_default");
            param.put("instances",matData);
            return JSONArray.toJSONString(param);
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    public static void setImageData(String response,String file){
        //读取TensorFlow返回信息
        JSONArray dataArr = JSON.parseObject(response).getJSONArray("predictions").getJSONArray(0);
        //初始化3维矩阵
        Mat matRes = new Mat(dataArr.size(),dataArr.getJSONArray(0).size(), CvType.CV_8UC3);
        //降维存储
        for (int i=0;i<dataArr.size();i++){
            JSONArray data2Arr = dataArr.getJSONArray(i);
            for (int j=0;j<data2Arr.size();j++){
                double[] data3 = new double[3];
                data3[0] = data2Arr.getJSONArray(j).getFloat(0);
                data3[1] = data2Arr.getJSONArray(j).getFloat(1);
                data3[2] = data2Arr.getJSONArray(j).getFloat(2);
                matRes.put(i,j,data3);
            };
        };
        //写入图片
        Imgcodecs.imwrite(file,matRes);
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值