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发现有

得到 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尝试了一下,结果成功了

这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.*;//包含了所有图形接口函数
import static org.bytedeco.opencv.global.opencv_imgcodecs.*;
import static org.bytedeco.opencv.global.opencv_imgproc.*; //COLOR_RGB2GRAY//得到灰度图像
public class Demo1 {public static void main(String[] args) {String filePath = "I:\\TestCode\\01km.png";Mat image = imread(filePath); // 加载图像imshow("1", image);// 原始图像Mat gray = new Mat();cvtColor(image, gray, COLOR_BGRA2GRAY); // 彩色图像转为灰度图像COLOR_RGB2GRAYimshow("2", gray);// 灰度图像Mat bin = new Mat();threshold(gray, bin, 120, 255, THRESH_TOZERO); // 图像二值化imshow("3", bin);// 二值图像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>

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

JavaCV依赖精简(Java OpenCV依赖精简)相关推荐

  1. java maven 项目依赖关系,java – 关于依赖关系共享的Maven多模块项目组合

    有几个类似的问题,但没有这样的.你如何处理这种情况(典型情况): 一个由8-11个子项目组成的项目,具有父工件/项目和一个主要项目,主要使用/声明其他项目作为模块. 问题是所有项目"严格&q ...

  2. JAVA基础学习精简心得笔记整理

    JAVA基础学习精简心得笔记整理 配置java环境变量 Java的运行过程  基本数据类型 引用数据类型 逻辑运算符 数组 方法重载 封装 继承 多态 多态的作用 单例设计模式 接口interface ...

  3. 【Android 安全】DEX 加密 ( Java 工具开发 | 加密解密算法 API | 编译代理 Application 依赖库 | 解压依赖库 aar 文件 )

    文章目录 一.加密解密算法 API 二.编译代理 Application 依赖库 三.解压代理 Application 依赖库 aar 文件 参考博客 : [Android 安全]DEX 加密 ( 常 ...

  4. Java Gradle入门指南之依赖管理(添加依赖、仓库、版本冲突)

    Java Gradle入门指南之依赖管理(添加依赖.仓库.版本冲突) 作者:@gzdaijie 本文为作者原创,转载请注明出处:http://www.cnblogs.com/gzdaijie/p/52 ...

  5. Java设计模式——依赖倒转原则

    一.什么是依赖倒转原则? 依赖倒转原则讲的是,要依赖于抽象,不要依赖于具体. 实现"开-闭"原则的关键是抽象化,并且从抽象化导出具体化实现."开-闭"原则是面向 ...

  6. Java设计模式 - 依赖倒转原则

    文章目录 1. 违反依赖倒转原则 2. 遵守依赖倒转原则 3. 依赖关系传递的3种方式 3.1 接口传递 3.2 构造方法传递 3.3 setter方法传递 4. 依赖倒转原则的注意事项和细节 Dep ...

  7. maven 创建java项目_手把手教你创建Java Maven依赖项目

    本教程介绍了如何通过MyEclipse Web项目,或者其他任何Maven项目来创建一个通用的Java/Maven项目.这些步骤包括基础的创建和使用Maven依赖.您将学习到: 创建一个Maven实用 ...

  8. Java Dependence Analysis(Java静态依赖分析)

    前言 在Java项目项目中,经常会面临依赖升级,依赖变更的情况.通常情况下,无法做到全面的检查,java8以上版本自带的jdeps命令可以对依赖进行分析,但受限于JDK的版本,jdeps功能有一定差异 ...

  9. MAC RStudio安装rJava等需要java环境依赖包教程

    MAC RStudio安装rJava等需要java环境依赖包教程 MAC安装JDK及环境变量配置 下载java JDK OS X版本并安装 打开Finder,可以在下图所示的路径中找到安装好的jdk ...

最新文章

  1. 怎样快速学习React
  2. Django POST请求错误
  3. (Spring)使用注解开发
  4. SAP Smartforms 条码打印
  5. python之简单的get和post请求
  6. 计算机机房坏境设施演练,计算机机房环境设施应急演练方案
  7. stream 的方式遍历(亲测)
  8. ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车指定花式动作
  9. 513. Find Bottom Left Tree Value
  10. SQLAlchemy 操作数据库
  11. 自动驾驶再出事!欧洲一辆自动驾驶小公交撞到行人
  12. boost:regex分割字符串(带有'\'字符) - zzusimon的专栏 - 博客频道 - CSDN.NET
  13. 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
  14. 算法 python_最全 Python 算法实现资源汇总!
  15. 用于薄膜太阳能电池的玻璃上大晶粒多晶硅
  16. h5 页面唤起微信和qq
  17. Android仿抖音加载框之两颗小球转动控件
  18. 【菜菜的sklearn课堂笔记】逻辑回归与评分卡-用逻辑回归制作评分卡-分箱
  19. 今天不发技术文,发点粉丝福利
  20. 浏览器兼容问题,一直是自己最头疼,一直回避的问题,今天看得到了一些启发,发奋今天开始研究这个,哈哈,以下为转载文章,好好学习。...

热门文章

  1. 如何拉长背景(每天一个PS小项目)
  2. 阿里云服务器设置报警,比如CDN设置报警
  3. ce逆向修改——扫雷(详细)
  4. 计算机学习资料网址大全
  5. 大学生一定要理解的事
  6. iphone5运行linux,iphone - 具有Linux和iPhone 5的HFP配置文件 - 堆栈内存溢出
  7. 配置Apache实现url转发
  8. 计算机读法综艺中文翻译英语,综艺节目,Variety Show,音标,读音,翻译,英文例句,英语词典...
  9. “想象之中”,【玉石雕刻刀】的神奇之处
  10. IOS 高德地图获取用户导航路径