JavaCV依赖精简(Java OpenCV依赖精简)

1.什么是opencv?

OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。该程序库也可以使用英特尔公司的IPP进行加速处理。

JavaCV可以认为是OpenCV的Java版,其本质上是一个Java Interface,是一个联结Java与OpenCV的桥梁,所以它本质上是依赖OpenCV的。关于这东西能查到的文档和资料实在是太少了,这个过程中着实踩了不少坑,记录一下以便帮助以后的人。

2、JavaCV依赖

最近使用 OpenCV 在做验证码识别,第一次采用的 maven 依赖包,下载的包太大,所以精简一下。

        <dependency>
            <groupid>org.bytedeco</groupid>
            <artifactid>javacv-platform</artifactid>
            <version>1.5.5</version>
        </dependency>

查了下,JavaCV 封装了包含FFmpeg、OpenCV、tensorflow、caffe、tesseract、libdc1394、OpenKinect、videoInput和ARToolKitPlus等在内的计算机视觉领域的常用库和实用程序类。
我只需要OpenCV, 按住 Ctrl 打开pom.xml发现有

JavaCV依赖精简(Java OpenCV依赖精简)

得到 OpenCV 的依赖包

    <dependency>
        <groupid>org.bytedeco</groupid>
        <artifactid>opencv-platform</artifactid>
        <version>4.5.1-1.5.5</version>
    </dependency>

试了一下,确实可以用。但是他把所有平台的 jar 都依赖进来了,只好继续优化。
打开pom.xml,经过不是很一帆风顺的尝试终于尝试出来。( 我电脑和jdk都是64位的所以一直使用 windows-x86_64 在尝试就是不行,好还后面换了windows-x86尝试了一下,结果成功了

JavaCV依赖精简(Java OpenCV依赖精简)

这6个依赖如下

        <dependency>
            <groupid>org.bytedeco</groupid>
            <artifactid>javacpp</artifactid>
            <version>1.5.5</version>
        </dependency>
        <dependency>
            <groupid>org.bytedeco</groupid>
            <artifactid>javacpp</artifactid>
            <version>1.5.5</version>
            <classifier>windows-x86</classifier>
        </dependency>
        <dependency>
            <groupid>org.bytedeco</groupid>
            <artifactid>openblas</artifactid>
            <version>0.3.13-1.5.5</version>
        </dependency>
        <dependency>
            <groupid>org.bytedeco</groupid>
            <artifactid>openblas</artifactid>
            <version>0.3.13-1.5.5</version>
            <classifier>windows-x86</classifier>
        </dependency>
        <dependency>
            <groupid>org.bytedeco</groupid>
            <artifactid>opencv</artifactid>
            <version>4.5.1-1.5.5</version>
        </dependency>
        <dependency>
            <groupid>org.bytedeco</groupid>
            <artifactid>opencv</artifactid>
            <version>4.5.1-1.5.5</version>
            <classifier>windows-x86</classifier>
        </dependency>

经过测试发现还可以删除2个,最终精简如下

        <dependency>
            <groupid>org.bytedeco</groupid>
            <artifactid>javacpp</artifactid>
            <version>1.5.5</version>
            <classifier>windows-x86</classifier>
        </dependency>
        <dependency>
            <groupid>org.bytedeco</groupid>
            <artifactid>openblas</artifactid>
            <version>0.3.13-1.5.5</version>
            <classifier>windows-x86</classifier>
        </dependency>
        <dependency>
            <groupid>org.bytedeco</groupid>
            <artifactid>opencv</artifactid>
            <version>4.5.1-1.5.5</version>
        </dependency>
        <dependency>
            <groupid>org.bytedeco</groupid>
            <artifactid>opencv</artifactid>
            <version>4.5.1-1.5.5</version>
            <classifier>windows-x86</classifier>
        </dependency>

3、测试代码

package com.demo.verify;

import org.bytedeco.opencv.opencv_core.Mat;
import static org.bytedeco.opencv.global.opencv_highgui.*;//&#x5305;&#x542B;&#x4E86;&#x6240;&#x6709;&#x56FE;&#x5F62;&#x63A5;&#x53E3;&#x51FD;&#x6570;
import static org.bytedeco.opencv.global.opencv_imgcodecs.*;
import static org.bytedeco.opencv.global.opencv_imgproc.*; //COLOR_RGB2GRAY

//&#x5F97;&#x5230;&#x7070;&#x5EA6;&#x56FE;&#x50CF;
public class Demo1 {
    public static void main(String[] args) {
        String filePath = "I:\\TestCode\\01km.png";
        Mat image = imread(filePath); // &#x52A0;&#x8F7D;&#x56FE;&#x50CF;
        imshow("1", image);// &#x539F;&#x59CB;&#x56FE;&#x50CF;
        Mat gray = new Mat();
        cvtColor(image, gray, COLOR_BGRA2GRAY); // &#x5F69;&#x8272;&#x56FE;&#x50CF;&#x8F6C;&#x4E3A;&#x7070;&#x5EA6;&#x56FE;&#x50CF;COLOR_RGB2GRAY
        imshow("2", gray);// &#x7070;&#x5EA6;&#x56FE;&#x50CF;
        Mat bin = new Mat();
        threshold(gray, bin, 120, 255, THRESH_TOZERO); // &#x56FE;&#x50CF;&#x4E8C;&#x503C;&#x5316;
        imshow("3", bin);// &#x4E8C;&#x503C;&#x56FE;&#x50CF;
        waitKey(0);
    }
}

4、Java OpenCV依赖精简

为了方便打包其他平台,设置一个变量,可以根据需要的平台切换。

    <properties>
        <javacpp.platform.android-arm>android-arm</javacpp.platform.android-arm>
        <javacpp.platform.android-arm64>android-arm64</javacpp.platform.android-arm64>
        <javacpp.platform.android-x86>android-x86</javacpp.platform.android-x86>
        <javacpp.platform.android-x86_64>android-x86_64</javacpp.platform.android-x86_64>
        <javacpp.platform.ios-arm>ios-arm</javacpp.platform.ios-arm>
        <javacpp.platform.ios-arm64>ios-arm64</javacpp.platform.ios-arm64>
        <javacpp.platform.ios-x86>ios-x86</javacpp.platform.ios-x86>
        <javacpp.platform.ios-x86_64>ios-x86_64</javacpp.platform.ios-x86_64>
        <javacpp.platform.linux-armhf>linux-armhf</javacpp.platform.linux-armhf>
        <javacpp.platform.linux-arm64>linux-arm64</javacpp.platform.linux-arm64>
        <javacpp.platform.linux-ppc64le>linux-ppc64le</javacpp.platform.linux-ppc64le>
        <javacpp.platform.linux-x86>linux-x86</javacpp.platform.linux-x86>
        <javacpp.platform.linux-x86_64>linux-x86_64</javacpp.platform.linux-x86_64>
        <javacpp.platform.macosx-x86_64>macosx-x86_64</javacpp.platform.macosx-x86_64>
        <javacpp.platform.windows-x86>windows-x86</javacpp.platform.windows-x86>
        <javacpp.platform.windows-x86_64>windows-x86_64</javacpp.platform.windows-x86_64>
    </properties>
    <dependencies>
        <dependency>
            <groupid>org.bytedeco</groupid>
            <artifactid>javacpp</artifactid>
            <version>1.5.5</version>
            <classifier>${javacpp.platform.windows-x86_64}</classifier>
        </dependency>
        <dependency>
            <groupid>org.bytedeco</groupid>
            <artifactid>openblas</artifactid>
            <version>0.3.13-1.5.5</version>
            <classifier>${javacpp.platform.windows-x86_64}</classifier>
        </dependency>
        <dependency>
            <groupid>org.bytedeco</groupid>
            <artifactid>opencv</artifactid>
            <version>4.5.1-1.5.5</version>
        </dependency>
        <dependency>
            <groupid>org.bytedeco</groupid>
            <artifactid>opencv</artifactid>
            <version>4.5.1-1.5.5</version>
            <classifier>${javacpp.platform.windows-x86_64}</classifier>
        </dependency>
    </dependencies>

在eclipse中打包执行都没问题,在idea中居然编译不过,idea需要多加一个依赖

        <dependency>
            <groupid>org.bytedeco</groupid>
            <artifactid>javacv</artifactid>
            <version>1.5.5</version>
        </dependency>

尝试了很久,才精简出来,若对你有帮助点个赞呗^_^

Original: https://blog.csdn.net/u014644574/article/details/122067708
Author: 小百菜
Title: JavaCV依赖精简(Java OpenCV依赖精简)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/520160/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球