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发现有
得到 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依赖精简)相关推荐
- java maven 项目依赖关系,java – 关于依赖关系共享的Maven多模块项目组合
有几个类似的问题,但没有这样的.你如何处理这种情况(典型情况): 一个由8-11个子项目组成的项目,具有父工件/项目和一个主要项目,主要使用/声明其他项目作为模块. 问题是所有项目"严格&q ...
- JAVA基础学习精简心得笔记整理
JAVA基础学习精简心得笔记整理 配置java环境变量 Java的运行过程 基本数据类型 引用数据类型 逻辑运算符 数组 方法重载 封装 继承 多态 多态的作用 单例设计模式 接口interface ...
- 【Android 安全】DEX 加密 ( Java 工具开发 | 加密解密算法 API | 编译代理 Application 依赖库 | 解压依赖库 aar 文件 )
文章目录 一.加密解密算法 API 二.编译代理 Application 依赖库 三.解压代理 Application 依赖库 aar 文件 参考博客 : [Android 安全]DEX 加密 ( 常 ...
- Java Gradle入门指南之依赖管理(添加依赖、仓库、版本冲突)
Java Gradle入门指南之依赖管理(添加依赖.仓库.版本冲突) 作者:@gzdaijie 本文为作者原创,转载请注明出处:http://www.cnblogs.com/gzdaijie/p/52 ...
- Java设计模式——依赖倒转原则
一.什么是依赖倒转原则? 依赖倒转原则讲的是,要依赖于抽象,不要依赖于具体. 实现"开-闭"原则的关键是抽象化,并且从抽象化导出具体化实现."开-闭"原则是面向 ...
- Java设计模式 - 依赖倒转原则
文章目录 1. 违反依赖倒转原则 2. 遵守依赖倒转原则 3. 依赖关系传递的3种方式 3.1 接口传递 3.2 构造方法传递 3.3 setter方法传递 4. 依赖倒转原则的注意事项和细节 Dep ...
- maven 创建java项目_手把手教你创建Java Maven依赖项目
本教程介绍了如何通过MyEclipse Web项目,或者其他任何Maven项目来创建一个通用的Java/Maven项目.这些步骤包括基础的创建和使用Maven依赖.您将学习到: 创建一个Maven实用 ...
- Java Dependence Analysis(Java静态依赖分析)
前言 在Java项目项目中,经常会面临依赖升级,依赖变更的情况.通常情况下,无法做到全面的检查,java8以上版本自带的jdeps命令可以对依赖进行分析,但受限于JDK的版本,jdeps功能有一定差异 ...
- MAC RStudio安装rJava等需要java环境依赖包教程
MAC RStudio安装rJava等需要java环境依赖包教程 MAC安装JDK及环境变量配置 下载java JDK OS X版本并安装 打开Finder,可以在下图所示的路径中找到安装好的jdk ...
最新文章
- 怎样快速学习React
- Django POST请求错误
- (Spring)使用注解开发
- SAP Smartforms 条码打印
- python之简单的get和post请求
- 计算机机房坏境设施演练,计算机机房环境设施应急演练方案
- stream 的方式遍历(亲测)
- ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车指定花式动作
- 513. Find Bottom Left Tree Value
- SQLAlchemy 操作数据库
- 自动驾驶再出事!欧洲一辆自动驾驶小公交撞到行人
- boost:regex分割字符串(带有'\'字符) - zzusimon的专栏 - 博客频道 - CSDN.NET
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- 算法 python_最全 Python 算法实现资源汇总!
- 用于薄膜太阳能电池的玻璃上大晶粒多晶硅
- h5 页面唤起微信和qq
- Android仿抖音加载框之两颗小球转动控件
- 【菜菜的sklearn课堂笔记】逻辑回归与评分卡-用逻辑回归制作评分卡-分箱
- 今天不发技术文,发点粉丝福利
- 浏览器兼容问题,一直是自己最头疼,一直回避的问题,今天看得到了一些启发,发奋今天开始研究这个,哈哈,以下为转载文章,好好学习。...
热门文章
- 如何拉长背景(每天一个PS小项目)
- 阿里云服务器设置报警,比如CDN设置报警
- ce逆向修改——扫雷(详细)
- 计算机学习资料网址大全
- 大学生一定要理解的事
- iphone5运行linux,iphone - 具有Linux和iPhone 5的HFP配置文件 - 堆栈内存溢出
- 配置Apache实现url转发
- 计算机读法综艺中文翻译英语,综艺节目,Variety Show,音标,读音,翻译,英文例句,英语词典...
- “想象之中”,【玉石雕刻刀】的神奇之处
- IOS 高德地图获取用户导航路径