Java调用OpenCV并通过OpenCL进行GPU加速

本文通过在Ubuntu16.04环境下使用OpenCV3.4.14结合Intel®HDGraphicsNEO实现了图像处理任务的GPU加速,并对比了Mat与UMat处理大尺寸图像的性能差异。

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

前言

本文是在上一篇博文[Ubuntu 16.04下静态编译OpenCV 3.4.14集成OpenCL调用Intel® HD Graphics NEO实现GPU加速]驱动了Intel® HD Graphics NEO的基础上进行的。

1 GPU devices are detected.
name:              Intel(R) Gen9 HD Graphics NEO
available:         1
imageSupport:      1
OpenCL_C_Version:  OpenCL C 2.0

本来顺便把Java调用的Jar包也编译出来了,但发现竟然没有UMat
查了OpenCV3.4的官方文档,确实没有关于UMat的说明。Stack Overflow上有类似的疑问opencv-transparent-api-umat-is-missing

解决办法

使用Github上的JavaCV开源实现即可。

Maven添加JavaCV包依赖

pom.xml添加如下内容

 <dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacv-platform</artifactId>
    <version>1.5.6</version>
  </dependency>

Demo源码

import org.bytedeco.opencv.opencv_core.*;
import static org.bytedeco.opencv.global.opencv_core.*;
import static org.bytedeco.opencv.global.opencv_imgproc.*;
import static org.bytedeco.opencv.global.opencv_imgcodecs.*;

public class App
{
	public static void main(String[] args)
	{
		long start = 0l, end = 0l;
		Mat image = imread("./Lena.png"); // 随便找了一张图片
		Mat src0 = new Mat(20000, 20000, CV_8UC3); // 将图片大小放大到20000×20000
		resize(image, src0, new Size(20000, 20000));
		UMat src1 = new UMat(20000, 20000, CV_8UC3);
		src0.copyTo(src1);
		
		// Mat
		start = System.currentTimeMillis();
		blur(src0, src0, new Size(1, 1));
		end = System.currentTimeMillis();
		System.out.println("Mat running times:" + (end - start) + "ms");

		// UMat
		start = end = 0l;
		start = System.currentTimeMillis();
		blur(src1, src1, new Size(1, 1));
		end = System.currentTimeMillis();
		System.out.println("UMat running times:" + (end - start) + "ms");
	}
}

运行结果

Mat running times:884ms
UMat running times:1ms
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值