当前位置:   article > 正文

Java使用OpenCV进行图像操作_java opencv

java opencv

OpenCV

概述

OpenCV(开源计算机视觉库)是在BSD(开源协议)许可下发布的。它是一个高度优化的库,专注于实时应用程序。它具有C ++,Python和Java接口,支持Windows,Linux,Mac OS,iOS和Android。

OpenCV是一个开源的计算机视觉库,它提供了一系列丰富的图像处理和计算机视觉算法,包括图像读取、显示、滤波、特征检测、目标跟踪等功能。

OpenCV被广泛应用于各种领域,如医疗影像处理、智能交通、安防监控、机器人视觉、虚拟现实等。它可以帮助开发者快速构建高效、准确、可靠的计算机视觉应用,并且支持多种编程语言,如C++、Python、Java等。

在计算机视觉应用中,OpenCV可以用来进行图像预处理、特征提取、物体检测、目标跟踪、三维重建等操作。通过结合深度学习技术,OpenCV还可以用于图像分类、目标分割、姿态估计等更加复杂的任务。

官网文档地址:https://docs.opencv.org/4.6.0/df/d65/tutorial_table_of_content_introduction.html

教程参考:https://www.w3cschool.cn/opencv/

教程参考:https://www.yiibai.com/opencv/opencv_adding_text.html

下载与安装

下载地址:https://opencv.org/releases/

在这里插入图片描述

下载到本地后,双击进行安装即可

在这里插入图片描述

目录说明

安装目录如下

在这里插入图片描述

build :基于window构建

sources:开源,提供源码
  • 1
  • 2
  • 3

build目录说明

在这里插入图片描述

这里是Java开发关注java目录即可

在这里插入图片描述

x64与x86代表给不同的系统使用

opencv-460.jar给java操作openvc的程序包
  • 1
  • 2
  • 3

由于是64位系统,所以关注x64目录

在这里插入图片描述

DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。DLL文件,放置于系统中。当执行某一个程序时,相应的DLL文件就会被调用

项目集成

方式1:

这里使用IDEA进行开发,导入opencv-460.jar库

使用快捷键 Ctrl+Shift+Alt+S打开
在这里插入图片描述
选择库项,导入Java库。
在这里插入图片描述
在这里插入图片描述
方式2:

除了上述方式,还可以将opencv-460.jar安装到本地仓库或私有仓库,然后在pom.xml中引入依赖。

在项目根目录创建lib目录,将上述提及的opencv-460.jaropencv_java460.dll放到该目录

在这里插入图片描述
pom.xml文件中,通过坐标的形式引入

        <!-- 加载lib目录下的opencv包 -->
        <dependency>
            <groupId>org.opencv</groupId>
            <artifactId>opencv</artifactId>
            <version>4.6.0</version>
            <scope>system</scope>
            <systemPath>${
   basedir}/lib/opencv-460.jar</systemPath>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

验证

public class MyTest {
   

	// 调用OpenCV库文件
    static {
   
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    }

    public static void main(String args[]) {
   
        // 创建一个3X3的对角矩阵
        Mat a = Mat.eye(3, 3, CvType.CV_8UC1);
        System.out.println(a.dump());
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

执行上述代码,不出意外将出现如下异常:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java460 in java.library.path
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
	at java.lang.Runtime.loadLibrary0(Runtime.java:871)
	at java.lang.System.loadLibrary(System.java:1122)
  • 1
  • 2
  • 3
  • 4

解决方案有2种:

1.将D:\Development\opencv\build\java\x64\opencv_java460.dll文件拷贝至下面2个目录,任选其一即可。

在这里插入图片描述

在这里插入图片描述
2.通过指定虚拟机参数解决:

-Djava.library.path=D:\WorkSpace\projectName\demo\lib\opencv_java460.dll
  • 1

Mat类

OpenCV中的Mat类是一个用于表示图像、矩阵和向量的基本数据类型,它可以包含任意尺寸和类型的元素。

创建Mat对象

创建一个Mat对象

# 生成一个空的矩阵
Mat mat = new Mat();
  • 1
  • 2

创建Mat对象时同时设置矩阵的基本参数

params1:代表矩阵的行数(rows)

params2:代表矩阵的列数(cols)

params3:代表矩阵中像素点的位数和通道数
  • 1
  • 2
  • 3
  • 4
  • 5
Mat a = Mat.eye(3, 3, CvType.CV_8UC1);
  • 1

其他操作

访问Mat对象中的像素值

double[] pixel = mat.get(row, col); // 获取像素值
  • 1

修改Mat对象中的像素值

mat.put(row, col, new double[]{
   255, 255, 255}); // 修改像素值
  • 1
  • 2

获取Mat对象的大小和通道数

int rows = mat.rows(); // 获取行数
int cols = mat.cols(); // 获取列数
int channels = mat.channels(); // 获取通道数
  • 1
  • 2
  • 3

常见图像API

读取与输出图像

在OpenCV中,图象输入与输出使用imread()imwrite()两个方法

1.imread()

params1:代表输入图片路径

params2:一个标志表明加载图象的颜色类型
  • 1
  • 2
  • 3

从文件读取一张图像并创建一个Mat对象

Mat mat1 = Imgcodecs.imread("D://test.png");

Mat mat2 = Imgcodecs.imread("D://test.png",Imgcodecs.IMREAD_LOAD_GDAL);
  • 1
  • 2
  • 3

2.imwrite()

params1:文件输出位置

params2:将要输出为图片的源矩阵的名字,它是一个我们读入或处理过的Mat类型的参数
  • 1
  • 2
  • 3

将一个Mat对象保存到文件中

    public static void main(String args[]) {
   
	    // 加载本地OpenCV库
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        
        Mat mat = Imgcodecs.imread("D://test.png");
        boolean imwrite = Imgcodecs.imwrite("D://write.png", mat);
        System.out.println("图像是否输出成功: " + imwrite);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

显示图像

可以通过GUI的方式显示图片,不需要再将图像通过流输出到本地再来查看

    public static void main(String args[]) {
   
        // 加载本地OpenCV库
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/650440
推荐阅读
相关标签
  

闽ICP备14008679号