javacv与djl混合编程:NDArray与Mat相互转换

本文介绍了如何在JavaCV与DJL混合编程中实现NDArray与Mat之间的转换。这两种数据类型分别是DJL的深度学习操作基础和OpenCV进行计算机视觉处理的基础。通过转换,开发者可以结合两者的优点,实现图像处理与深度学习任务的无缝对接。
摘要由CSDN通过智能技术生成

NDArray 是djl的基本数据类型;Mat是javacv的基本数据类型;因此为了达到javacv与djl混合编程的目的,两者(NDArray与Mat)需要相互转换,相互转换代码如下:

public static NDArray matToNDArray(Mat m) {
    	Loader.load(opencv_java.class);
    	
    	float[] data = new float[m.channels() * m.rows() * m.cols()];    	
    	@SuppressWarnings("resource")
		OpenCVFrameConverter.ToOrgOpenCvCoreMat converter1 = new OpenCVFrameConverter.ToOrgOpenCvCoreMat();		
    	org.opencv.core.Mat frame = new org.opencv.core.Mat();
    	converter1.convertToOrgOpenCvCoreMat(converter1.convert(m)).assignTo(frame, CvType.CV_32FC1);   
    	frame.get(0,0,data);
    	NDManager manager = NDManager.newBaseManager();
    	NDArray nd = manager.create(data, new Shape(m.rows(), m.cols()));
    	nd = nd.divi(255f);
		return nd;
	}
public static Mat ndarrayToMat(NDArray a) {
		Loader.load(opencv_java.class);
		org.opencv.core.MatOfFloat fm;
		org.opencv.core.Mat reshapem = null;
		
		if(a.getDataType() == DataType.UINT8) {
			a = a.div(255f);
			fm = new org.opencv.core.MatOfFloat(a.toFloatArray());
			reshapem = fm.reshape(1,new int[] {Math.round(a.getShape().get(0)),Math.round(a.getShape().get(1))});
		}else {

		fm = new org.opencv.core.MatOfFloat(a.toFloatArray());
		reshapem = fm.reshape(1,new int[] {Math.round(a.getShape().get(0)),Math.round(a.getShape().get(1))});
		}
		@SuppressWarnings("resource")
		OpenCVFrameConverter.ToMat converter1 = new OpenCVFrameConverter.ToMat();
		Mat result = converter1.convert(converter1.convert(reshapem));
		return result;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值