opencv java ubuntu_Ubuntu 16.04配置OpenCV 3.1.0 for Java

我们都知道,OpenCV是基于C++的开源计算机视觉库,但是从2.4.4版本开始提供了Java绑定,也就是说,我们也可以使用Java来开发基于OpenCV的计算机视觉应用。目前,最新的版本是3.1.0,在本文中将会介绍如何中Ubuntu 16.04上搭建OpenCV for Java的开发环境,假设目前使用的是刚刚重装的Linux操作系统。

1. 配置Java环境

在生成OpenCV的Makefile之前,cmake工具会检查当前系统中是否已经配置好了Java环境,以决定是否会生成Java开发相应的包。因此,我们首先要确认当前系统已经配置好了Java的开发环境,这一部分内容不属于本文的重点,请参看其他文章。

2. 安装编译依赖包

在Linux下编译OpenCV需要依赖很多软件包,这些包对于以后进行计算机视觉应用时也需要使用。在Ubuntu下,可以直接使用apt-get工具轻松完成,对应的命令如下:

sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev python-dev python-numpy libttb2 libttb-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libdc1394-22-dev ant

3. 解压opencv-3.1.0源码包

由于源码包的来源不同,压缩包的格式可能也会有所不同,主要有zip和tgz两种格式,可以分别用unzip和tar命令来解压,这里不再详细说明。本文中解压出来的文件夹顶层目录名称为:

opencv-3.1.0

4. 创建编译输出文件夹

为了防止编译的时候破坏opencv源码包的目录结构,一般都不推荐直接在源码包的顶级目录下执行源码的编译工作,通常是在该目录下面单独创建一个build文件夹,所有的编译中间文件和最终的目标文件都输出到这个文件中,过程如下:

cd opencv-3.1.0

mkdirbuild

cd build

5. 生成Makefile文件

首先请确认当前的工作目录为build文件夹,然后需要利用cmake工具来生成编译整个工程的Makefile文件,执行的命令如下:

cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=/usr/local ../

但是,很不幸的是很大可能性此过程并不能成功,而是会因为在下载ippicv_linux_20151201.tgz第三方包的时候超时而生成Makefile失败。解决办法是从参考资料[1]提供的链接中下载此源码包,然后将其拷贝到opencv源码包的同级目录下,然后执行下面的命令:

ipp_file=../ippicv_linux_20151201.tgz &&ipp_hash=$(md5sum $ipp_file | cut -d" " -f1) &&ipp_dir=3rdparty/ippicv/downloads/linux-$ipp_hash &&

mkdir -p $ipp_dir &&

cp $ipp_file $ipp_dir

说明:还有一种方法就是将IPP编译选项关闭,只需要在cmake命令中添加选项:

cmake -DWITH_IPP=OFF

以上命令执行完成后,再重新执行之前的cmake命令,这样就可以成功实现Makefile文件的生成。如果成功生成了文件,那么请检查创建过程中的输出信息是否存在如下图所示的一行内容:

210339462c262a9f12fafcb1b363c96c.png

在其中的“To be built”行中指出了最终会编译的对应的模块,如果成功检测到了Java环境,那么一定存在“java”这个选项,如上图第3行所示。如果没有找到,则说明Java运行环境没有配置好,可以使用类似下面的命令重新配置一下:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64

导出相应的环境变量以后,再重新执行cmake命令。

6. 编译源代码

接下来,需要根据生成的Makefile规则执行源代码的编译过程,对于现在的多核系统,可以执行以下命令来实现并行编译:

make -j8

最终,会在“./bin/”目录下生成包含Java接口的JAR文件“opencv-310.jar”,会在“./lib/”目录下生成对应的动态链接库文件“libopencv_java310.so”,这两个文件就是使用Java开发基于OpenCV的计算机视觉应用时所用到的库文件。

7. 安装库文件

最后,需要将生成的库文件安装到/usr/local目录下的对应子文件下,此过程需要管理员权限创建文件和文件夹,执行的命令如下:

sudo make install

Java开发相关的动态链接库文件和jar包位于目录:

/usr/local/share/OpenCV/java/

8. 测试

接下来的工作就是在Eclipse上测试能否使用OpenCV库来开发Java计算机视觉应用程序。

(1) 创建工程,依次选择File -> New -> Java Project,如下图所示,填写工程名,然后点击Finish完成。

75a587eea9a4700f331c9073289d56e3.png

(2)配置工程属性。右键单击工程,选择“Properties”属性菜单。选择“Java Build Path”中的“Libraries”子选项卡,选择“Add Library...”按钮,在弹出的对话框中选择“User Library”类型,然后单击Next。

f63b9687e58fd65350b17bf7b7fddf25.png

然后点击“New”按钮,在弹出的对话框中输入用户库的名字,比如“opencv-3.1.0”。接下来,我们需要将这个库关联到对应的JAR文件。选择“Edit”按钮,在弹出的文件选择对话框中,找到opencv-310.jar文件所在的路径,并选择该文件,确认。

294e061438d9277888feb5a9963c1e5d.png

接下来,展开JAR包,选中“Native Library Location”,然后点击旁边的“Edit”按钮,选择libopencv_java310.so所在的路径,即/usr/local/share/OpenCV/java文件夹。这样所有的属性都配置完成了,点击Finish即可。

(3) 编写测试代码。创建一个Sample类,然后输入以下代码。

1 import org.opencv.core.*;2 importorg.opencv.imgcodecs.Imgcodecs;3

4 public classSample {5 static{System.loadLibrary(Core.NATIVE_LIBRARY_NAME);}6

7 public static voidmain(String[] args){8 Mat m = Imgcodecs.imread("/home/tang/Pictures/baby.jpg");9 System.out.println(m);10 }11 }

该程序会从本地文件系统中读取一张图片,并把数据存储到Mat类中,然后输出这个图片到信息。运行结果如下:

76e7afb124a00779ab066614b94646a8.png

如果你看到了类似如上的信息,那么恭喜你,你的OpenCV Java开发环境已经配置好了!

参考资料:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

service 层 拼接的html 代码如何直接返回_字符串拼接,会走StringBuilder 吗?

前言最近在突然想到了String字符串拼接问题,于是做了一个demo测试了一下,到底String类型的字符串在拼接的时候,哪种情况下会走会走StringBulider进行字符串拼接,而哪种情况编译器会对代码进行优化?话不多说&#xff0c…

迁移学习训练集准确率一直上不去_可以提高你的图像识别模型准确率的7个技巧...

假定,你已经收集了一个数据集,建立了一个神经网络,并训练了您的模型。但是,尽管你投入了数小时(有时是数天)的工作来创建这个模型,它还是能得到50-70%的准确率。这肯定不是你所期望的。下面是一些提高模型性能指标的策…

华为云客户端_华为公布云手机计费清单,要不要光刻机也给出了答案

华为云手机一出来,大家的好奇心就上来了。这就是解决华为无芯片的代替方案。纷纷说道,可以绕开光刻机,光刻机瞬间变废铁。当时我还发布过文章分析:现在的云手机只是一个云端应用,并不是真正的云手机。需要在手机或电脑…

java 柱状图 宽度_Java实现 LeetCode 84 柱状图中最大得矩形

84. 柱状图中最大的矩形给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为…

java中为什么要用注解_java中的注解,真的很重要,你理解了嘛?

这篇文章开始讲解java中的注解,在平时的开发当中我相信你或多或少的接触过注解。比如你可能都见过override,它代表的就是一个注解。但是,为了更加清晰的去介绍注解,我还是先给出一个例子,让你能够方便的理解。一、认识…

qtdesigner右击按钮没有 to slot_或添加“力感按钮”再升级,Apple Pencil会更“能打”?...

[钉科技编译]“I have a pen/I have an apple/Ah apple pen”,钉科技编辑写到的这些“歌词”,看上去是不是很熟悉?对了,这是搞笑艺人Piko Taro那支颇“洗脑”的《PPAP》里的内容。其实,如果说到…

java三级报名_java web 学习 --第四天(Java三级考试)

jsp内置对象 outout属性类型:JspWriter 作用域:page 作用:一个输出缓存流,向客户端浏览器输出信息JspWriter类中常用的方法和功能flush() 输出缓存区的数据close() 关闭输出流clearBuffer() 清除缓存区的数据,并把数据…

tlab java_浅析java中的TLAB

好久,好久....没有更博客了。这一次利用闲暇时间,来扯一下关于JVM中的TLAB。什么是TLAB?它是干什么的?咋们先抛开这个问题,一切的开始得从new对象到指针碰撞开始讲起。new对象与指针碰撞new对象怎么就出问题了呢&#…

选择排序算法流程图_常用排序算法之选择排序

前两天给大家分享了冒泡排序和插入排序(没关注的同学,可以关注后查看历史消息),今天继续给大家分享另一种常用的排序算法--选择排序。选择排序选择排序和插入排序很相似,也区分已排序区间和未排序区间,选择排序是每次从未排序区间…

pygame小游戏代码_Py之pygame:有趣好玩——利用pygame库实现一个移动底座弹球的小游戏...

Py之pygame:有趣好玩——利用pygame库实现一个移动底座弹球的小游戏目录输出结果实现代码输出结果​实现代码# -*- coding: utf-8 -*-#Py之pygame:有趣好玩——利用pygame库实现一个移动底座弹球的小游戏import pygame as pg from pygame.locals import …

大白菜pe解锁bitlocker_微PE工具箱 v2.1 官方版,最好用的 Win10PE 系统

微PE工具箱 v2.1 – 最好用的WinPE装机维护工具!WinPE工具箱,装机维护最得力的助手,最后救命稻草。化繁为简,小材大用,一键安装,极速启动。微PE工具箱,最好用的PE工具箱,没有之一。无…

java8用什么tomcat_Tomcat8+JDK8安装与配置

一,系统配置1.操作系统:win10 64位2.tomcat版本:Tomcat8 64位3.Java版本:JDK8 64位二,软件下载下载到本地后直接打开安装,修改存储目录,如图:2.2 Tomcat8下载,官网地址&…

谷歌离开游览器不触发_谷歌游览器

谷歌浏览器不错,可保存不同的账户,互相不干扰。有2个账号,工作账号和个人账号,泾渭分明,不会打架,管理账号。总经理管理公司人员,厂长管理工人,业务员要管理自己账号,管理…

vue保存图片到手机相册_手机照片误删了怎么找回?这三个方法轻松搞定,亲测有效...

手机照片误删了怎么找回?很多人在使用手机拍照时,都会出现拍好的照片不小心点击了删除等情况,比如去某个地方游玩,或者看到了某个特别的场景拍下来的时候不小心删除了,那就非常可惜了,那么如何找回手机中误…

vue if判断_VUE学习记录2

v-if、v-eles、v-else-if​ v-if用于条件判断&#xff0c;判断Dom元素是否显示。<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scal…

利用melendy插入参考文献_四苯基卟啉在改性磷酸锆层间的插入及荧光增强

一、摘要近年来&#xff0c;出于节约一次性能源的考虑&#xff0c;人们已经加大对太阳能等天然资源的利用&#xff0e;致力于模拟天然光合作用的研究&#xff0c;而光合作用中的捕光复合物又称为光子天线。光子天线中往往存在一种或几种猝灭剂&#xff0c;猝灭剂吸收光子后产生…

百度链接解析_【集合】百度分享链接解析的方法总结

请大家在使用所有方法之前请先查看菜单栏中的用前必看01在别人分享的链接前面加 http://pan.naifei.cc/? 然后放入浏览器就可以解析了。比如: http://pan.naifei.cc/?链接:https://pan.baidu.com/s/XXX 提取码:1234 复制这段内容后打开百度网盘手机App&#xff0c;操作更方…

table表头固定4种方法_在常见的3种工资条场景中,教你4种批量打印工资条的方法...

私信回复关键词【福利】~获取丰富办公资源&#xff0c;助你高效办公早下班&#xff01;打印工资条估计是财务老师的痛&#xff0c;要把一行行的数据&#xff0c;变成一条条的工资条。数据很多&#xff0c;表头很复杂。一个个复制粘贴&#xff1f;那是不可能的&#xff01;那怎么…

hbase java api最新版本_HBase基本命令与新版本Java API

简介有关HBase的安装可以参考hbase安装我们可以通过hbase shell和hbase数据库进行交互&#xff0c;也可以通过Java-api和hbase数据库交互&#xff0c;这里我们使用的是hbase-client。主要是介绍2.0重大重构之后的api的基本使用。命名空间#列出所有命名空间list_namespace#新建命…

java导致native非法指令,Java代码引起的NATIVE野指针问题(上)

朴英敏&#xff0c;小米MIUI部门。从事嵌入式开发和调试工作8年多&#xff0c;擅长逆向分析方法&#xff0c;主要负责解决安卓系统稳定性问题。上周音乐组同事反馈了一个必现Native Crash问题&#xff0c;tombstone如下&#xff1a; pid: 5028, tid: 5028, name: com.miui.play…