java+opencv+onnx(yolo8)

本文描述了作者将Python中的YOLOv8模型转换到Java中进行对象检测的过程,涉及ONNX模型读取、图像预处理、网络前向传播、非极大值抑制(NMS)以及结果可视化,展示了在不同语言间迁移的困难和最终实现的成就感。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

	static void dnn(){
		Net net= Dnn.readNetFromONNX("yolov8n.onnx");
		String tempPath = "36.jpg";
		Mat mat = Imgcodecs.imread(tempPath);
		Mat blob = Dnn.blobFromImage(mat, 1/255.0, new Size(640,640));
		net.setInput(blob);
		Mat predict = net.forward();
		Mat mask = predict.reshape(0,1).reshape(0, predict.size(1));
		
		double width = mat.cols() /640.0;
		double height = mat.rows() /640.0;
		Rect2d[] rect2d = new Rect2d[mask.cols()];
		float[] scoref = new float[mask.cols()];
		int[] classid = new int[mask.cols()];
		for (int i = 0; i < mask.cols(); i++) {
			double[] x = mask.col(i).get(0, 0);
			double[] y = mask.col(i).get(1, 0);
			double[] w = mask.col(i).get(2, 0);
			double[] h = mask.col(i).get(3, 0);
			rect2d[i] = new Rect2d((x[0]-w[0]/2)*width, (y[0]-h[0]/2)*height, w[0]*width, h[0]*height);
			Mat score = mask.col(i).submat(4, predict.size(1)-1, 0, 1);
			MinMaxLocResult mmr = Core.minMaxLoc(score);
			scoref[i] = (float)mmr.maxVal;
			classid[i] = (int) mmr.maxLoc.y;
		}
		MatOfRect2d bboxes = new MatOfRect2d(rect2d);
		MatOfFloat scores = new MatOfFloat(scoref);
		MatOfInt indices = new MatOfInt();
		Dnn.NMSBoxes(bboxes, scores, 0.3f, 0.5f, indices);
		List<Integer> result = indices.toList();
		for (Integer integer : result) {
			Imgproc.rectangle(mat, new Rect(rect2d[integer].tl(), rect2d[integer].size()),
		              new Scalar(255, 0, 0), 1);
				Imgproc.putText(mat, classid[integer]+":"+scoref[integer], rect2d[integer].tl(),
                  Imgproc.FONT_HERSHEY_SIMPLEX, 0.5, new Scalar(0, 255, 0));
		}
		OpencvUtil.imshow("展示图片", mat);
	}

结果图
python 资料不少,找着很简单。转过来用java,唉一言难尽啊,可以说基本找不到,对着python c++ 改了一个月终于改的可以了真不容易啊

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值