opencv的java api_OpenCV Java开发教程
从OpenCV 2.4.4开始,OpenCV支持桌面Java开发,使用与Android开发几乎相同的界面。本指南将帮助您使用OpenCV创建您的第一个Java(或Scala)应用程序。我们将使用Apache Ant或Simple Build Tool(SBT)来构建应用程序。
如果要使用Eclipse请参考:使用OpenCV Java与Eclipse。有关本指南的进一步阅读,请参阅Android开发教程简介。
我们将在本指南中做什么
在本指南中,我们将:获取OpenCV与桌面Java支持
创建一个Ant或SBT项目
在Java或Scala中编写一个简单的OpenCV应用程序
使用相同的过程samples/java在OpenCV存储库的文件夹中创建样本,因此如果丢失,请查阅这些文件。
获得正确的OpenCV
从版本2.4.4开始OpenCV包括桌面Java绑定。
下载
最简单的方法是从OpenCV SourceForge存储库中下载相应的2.4.4或更高版本的软件包。注意Windows用户可以opencv/build/java/在包中的文件夹中找到Java开发所需的预构建文件。对于其他操作系统,需要从源代码构建OpenCV。
获取OpenCV源的另一个选择是克隆OpenCV git存储库。为了使用Java绑定构建OpenCV,您需要安装JDK(Java Development Kit)(我们推荐使用Oracle / Sun JDK 6或7),Apache Ant和Python v2.6或更高版本。
建立
我们来构建OpenCV:git clone git://github.com/opencv/opencv.git
cd opencv
git checkout 2.4
mkdir build
cd build
生成Makefile或MS Visual Studio *解决方案,或用于在系统中构建可执行文件的任何内容:cmake -DBUILD_SHARED_LIBS = OFF ..
或者cmake -DBUILD_SHARED_LIBS = OFF -G“Visual Studio 10”..注意当OpenCV构建为一组静态库(-DBUILD_SHARED_LIBS = OFF选项)时,Java绑定动态库是足够的,即不依赖于其他OpenCV库,而是包含所有OpenCV代码。
检查CMake的输出,并确保java是“待构建”模块之一。如果没有,可能你缺少依赖。您应该通过查看CMake输出来查找未找到并安装的任何与Java相关的工具进行故障排除。
注意如果CMake在您的系统中找不到Java,则在运行JAVA_HOME环境变量之前,使用安装JDK的路径设置JAVA_HOME环境变量。例如:export JAVA_HOME=/usr/lib/jvm/java-6-oracle
cmake -DBUILD_SHARED_LIBS=OFF ..
现在开始构建:make -j8
要么msbuild / m OpenCV.sln / t:Build / p:Configuration = Release / v:m
除此之外,还将创建一个包含Java接口(bin/opencv-244.jar)和包含Java绑定和所有OpenCV内容(lib/libopencv_java244.so或bin/Release/opencv_java244.dll分别))的本地动态库的jar 。稍后我们会使用这些文件。
Ant的Java示例注意在opencv/samples/java/ant文件夹中提供了描述的示例OpenCV库。创建一个文件夹,您将开发此示例应用程序。
在此文件夹中build.xml,使用任何文本编辑器创建具有以下内容的文件:< project name = “SimpleSample” basedir = “。” default = “rebuild-run” >
< property name = “src.dir” value = “src” />
< property name = “lib.dir” value = “$ {ocvJarDir}” />
< path id = “classpath” >
< fileset dir = “$ {lib.dir}” includes = “** / *。jar” />
path >
< property name = “build.dir” value = “build” />
< property name = “classes.dir” value = “$ {build.dir} / classes” />
< property name = “jar.dir” value = “$ {build.dir} / jar” />
< property name = “main-class” value = “$ {ant.project.name}” />
< target name = “clean” >
< delete dir = “$ {build.dir}” />
target >
< target name = “compile” >
< mkdir dir = “$ {classes.dir}” />
< javac includeantruntime = “false” srcdir = “$ {src.dir}” destdir = “$ {classes.dir}” classpathref = “classpath” />
target >
< target name = “jar” depends = “compile” >
< mkdir dir = “$ {jar.dir}” />
< jar destfile = “$ {jar.dir} / $ {ant.project.name} .jar” basedir = “$ {classes.dir}” >
< manifest >
< attribute name = “Main-Class” value = “$ {main-class}” />
manifest >
jar >
target >
< target name = “run” depends = “jar” >
“ java fork = ”true“ classname = ”$ {main-class}“ >
< sysproperty key = “java.library.path” path = “$ {ocvLibDir}” />
< classpath >
< path refid = “classpath” />
< path location = “$ {jar.dir} / $ {ant.project.name} .jar” />
classpath >
java >
target >
< target name = “rebuild” depends = “clean,jar” />
< target name = “rebuild-run” depends = “clean,run” />
project >注意该XML文件可以重用于构建其他Java应用程序。它描述了第3 - 12行中的通用文件夹结构和用于编译和运行应用程序的常用目标。当重用该XML时,不要忘记修改第1行中的项目名称,也是主类的名称(第14行)。OpenCV jar和jni lib的路径预期为第5行中的参数(“$ {ocvJarDir}”和第37行中的“$ {ocvLibDir}”),但为方便起见,您可以对这些路径进行硬编码。有关其构建文件格式的详细说明,请参阅Ant文档。在src文件旁边创建一个文件夹build.xml和一个SimpleSample.java文件。
将以下Java代码放入SimpleSample.java文件中:import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.CvType;
import org.opencv.core.Scalar;
class SimpleSample {
static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }
public static void main(String[] args) {
System.out.println("Welcome to OpenCV " + Core.VERSION);
Mat m = new Mat(5, 10, CvType.CV_8UC1, new Scalar(0));
System.out.println("OpenCV Mat: " + m);
Mat mr1 = m.row(1);
mr1.setTo(new Scalar(1));
Mat mc5 = m.col(5);
mc5.setTo(new Scalar(5));
System.out.println("OpenCV Mat data:\n" + m.dump());
}
}
在控制台中的文件夹中运行以下命令build.xml:ant -DocvJarDir = path / to / dir / contained / opencv-244.jar -DocvLibDir = path / to / dir / contained / opencv_java244 / native / library
例如:ant -DocvJarDir = X:\ opencv-2.4.4 \ bin -DocvLibDir = X:\ opencv-2.4.4 \ bin \ Release
该命令应启动[重新建立和运行样品。你应该在屏幕上看到这样的东西:
Java和Scala的SBT项目
现在我们将使用SBT创建一个简单的Java应用程序。这是对不熟悉此构建工具的人的简要介绍。我们正在使用SBT,因为它特别容易和强大。
首先,使用其网站上的说明下载并安装SBT。
接下来,导航到您想要应用程序来源的新目录(外部opencv目录)。让我们称之为“JavaSample”并创建一个目录:cd
mkdir JavaSample
现在我们将创建必要的文件夹和一个SBT项目:cd JavaSample
mkdir -p src/main/java # This is where SBT expects to find Java sources
mkdir project # This is where the build definitions live
现在project/build.scala在您最喜欢的编辑器中打开并粘贴以下内容。它定义了您的项目:import sbt._
import Keys._
object JavaSampleBuild extends Build {
def scalaSettings = Seq(
scalaVersion := "2.10.0",
scalacOptions ++= Seq(
"-optimize",
"-unchecked",
"-deprecation"
)
)
def buildSettings =
Project.defaultSettings ++
scalaSettings
lazy val root = {
val settings = buildSettings ++ Seq(name := "JavaSample")
Project(id = "JavaSample", base = file("."), settings = settings)
}
}
现在编辑project/plugins.sbt并粘贴以下内容。这将启用Eclipse项目的自动生成:addSbtPlugin(“com.typesafe.sbteclipse”%“sbteclipse-plugin”%“2.1.0”)
现在运行sbt从JavaSample根和从SBT运行eclipse生成一个eclipse项目:sbt # Starts the sbt console
eclipse # Running "eclipse" from within the sbt console
你应该看到这样的东西:
您现在可以使用导入... - >现有项目将SBT项目导入到Eclipse中。无论您是否实际执行此操作都是可选的指南; 我们将使用SBT来构建项目,所以如果你选择使用Eclipse,它将作为一个文本编辑器。
为了测试一切正常,创建一个简单的“Hello OpenCV”应用程序。通过创建src/main/java/HelloOpenCV.java具有以下内容的文件来执行此操作:public class HelloOpenCV {
public static void main(String[] args) {
System.out.println("Hello, OpenCV");
}
}
现在从sbt控制台执行运行,或者更简洁地,从命令行运行sbt run:sbt run
你应该看到这样的东西:
运行SBT样品
现在我们将使用OpenCV创建一个简单的面部检测应用程序。
首先,创建一个lib/文件夹并将OpenCV jar复制到其中。默认情况下,SBT将lib文件夹中的jar添加到Java库搜索路径。您可以选择重新运行sbt eclipse来更新Eclipse项目。mkdir lib
cp / build / bin / opencv_ .jar lib /
sbt eclipse
接下来,创建目录src/main/resources并将此Lena图像下载到其中:
确保它被调用"lena.png"。资源目录中的项目在运行时可用于Java应用程序。
接下来,lbpcascade_frontalface.xml从目录复制opencv/data/lbpcascades/到resourcescp /data/lbpcascades/lbpcascade_frontalface.xml src / main / resources /
现在修改src / main / java / HelloOpenCV.java,因此它包含以下Java代码:import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.objdetect.CascadeClassifier;
//
// Detects faces in an image, draws boxes around them, and writes the results
// to "faceDetection.png".
//
class DetectFaceDemo {
public void run() {
System.out.println("\nRunning DetectFaceDemo");
// Create a face detector from the cascade file in the resources
// directory.
CascadeClassifier faceDetector = new CascadeClassifier(getClass().getResource("/lbpcascade_frontalface.xml").getPath());
Mat image = Imgcodecs.imread(getClass().getResource("/lena.png").getPath());
// Detect faces in the image.
// MatOfRect is a special container class for Rect.
MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(image, faceDetections);
System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));
// Draw a bounding box around each face.
for (Rect rect : faceDetections.toArray()) {
Imgproc.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0));
}
// Save the visualized detection.
String filename = "faceDetection.png";
System.out.println(String.format("Writing %s", filename));
Imgcodecs.imwrite(filename, image);
}
}
public class HelloOpenCV {
public static void main(String[] args) {
System.out.println("Hello, OpenCV");
// Load the native library.
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
new DetectFaceDemo().run();
}
}
请注意对System.loadLibrary(Core.NATIVE_LIBRARY_NAME)的调用。必须在使用任何本机OpenCV方法之前,每个Java进程必须执行一次此命令。如果您不打电话,您将收到UnsatisfiedLink错误。如果您尝试在已经加载OpenCV时加载OpenCV,您还会收到错误。
现在使用`sbt run`运行面部检测应用程序:sbt run
你应该看到这样的东西:
它也应该写下面的图像到faceDetection.png:
你完成了!现在,您有一个使用OpenCV的示例Java应用程序,因此您可以自己开始工作。祝你好运!
opencv的java api_OpenCV Java开发教程相关推荐
- java安卓app开发教程_[Android教程] Cordova开发App入门(一)创建android项目
前言 Apache Cordova是一个开源的移动开发框架.允许使用标准的web技术-HTML5,CSS3和JavaScript做跨平台开发. 应用在每个平台的具体执行被封装了起来,并依靠符合标准的A ...
- java安卓app开发教程,Android app开发入门 —— your 'Hello, World'
从这篇可以掌握到 Android app开发环境的搭建 开发工具介绍及安装 创建你的"Hello, World" 工程结构的介绍 工程gradle配置 简单布局 代码sample ...
- Seata 新特性,APM 支持 SkyWalking,java区块链开发教程pdf
Seata 融入 SkyWalking 监控后,就有了 APM 特性,用户在定位 Seata 分布式事务的问题时,可以通过分布式链路.机器指标.日志内容等多个维度进行问题剖析,实现定位问题的提效. ...
- java区块链开发教程,原来SqlSession只是个甩手掌柜
前言 我们在执行Sql之前,需要先获取SqlSession对象,但是我们也提到了SqlSession下面还有四大对象,所以SqlSession只是个甩手掌柜,真正干活的却是Executor等四大对象: ...
- Java组件化开发教程!工信部java软件开发工程师证书
这些面试题包含哪些内容? 借花献佛!朋友干了5年整的Java面试官,给我分享了一份面试官最爱问的Java面试题这份面试题包含了 19 个模块:Java 基础.容器.多线程.反射.对象拷贝.Java W ...
- Java组件化开发教程!java工程师求职简历word模板
什么是数据脱敏 先来看看什么是数据脱敏?数据脱敏也叫数据的去隐私化,在我们给定脱敏规则和策略的情况下,对敏感数据比如 手机号.银行卡号 等信息,进行转换或者修改的一种技术手段,防止敏感数据直接在不可靠 ...
- java移动端开发教程视频_Java Web开发-项目部分(中国移动科技综合管理系统)视频教程 - JavaWeb - Java - 私塾在线 - 只做精品视频课程服务...
第01节课:进行整体课程概览:参看其他项目,总结需要实现的功能:讲解本次项目练习要实现的功能:基本的业务功能介绍 第02节课:页面布局:框架使用:页面上菜单的使用:项目基本的数据字典:构建包结构和划分 ...
- Android开发教程JAVA基础(汇总)
Android游戏开发视频教程(汇总) Android开发教程JAVA基础之Java 概述 Android开发教程JAVA基础之标示符.关键字1 Android开发教程JAVA基础之标示符.关键字2 ...
- 后台管理系统怎么实现操作日志原理_springboot角色权限后台管理系统脚手架实战开发教程包含完整源码...
自从猿来入此发布实战开发教程以来,我们截至目前一共发布了22个Java实战项目开发教程,从最基础的Java控制台实战项目到数据库封装教程再到swing的单机项目教程.servlet的web实战教程.s ...
最新文章
- 你的「所见所闻」,才是电视的核心竞争力
- ORA-00904 的解决
- PyTorch 实现 VAE 变分自编码器 含代码
- (Java集合框架)集合框架概述和Collection常用功能及遍历
- Spring Cloud Alibaba基础教程:支持的几种服务消费方式(RestTemplate、WebClient、Feign)
- 坐地铁可以刷学生卡吗_在沈阳办的公交卡能刷地铁吗?是学生卡,卡上写的是盛京通...
- feedback.php,feedback.php
- GAN —— 《Generative Adversarial Nets》
- HDU-4618 Palindrome Sub-Array 暴力枚举
- 聚类算法-K均值(K-means)
- CSS:公共样式(自用)
- [hdu5628]Clarke and math(dirichlet卷积)
- 计算机考证包括cad吗
- 2019年8月 华为鸿蒙,华为2019年开发者大会将于8月9日举行,期待鸿蒙吗?
- catia二次开发:检查文件类型 检查部件类型 产品名称 通过交互选择约束两个零件轴系重合 添加自定义属性,MasterShapeRepresentation
- CP2102 USB to UART Bridge Controller 驱动安装(windows or Ubuntu)
- 反病毒工具-Wireshark
- Mand Mobile - 滴滴出品的适用于金融项目的 Vue 移动端 UI 组件库,免费开源、灵活快速、丰富实用
- linux 搭建mycat
- CWnd::Create和CWnd::CreateEx 区别
热门文章
- Codeforces - Good Bye 2020
- 怎样在视频流媒体服务器里实现RTSP h265转RTMP?
- matlab绿色 不伤眼,蓝光和超清哪个伤眼睛 伤害都很低不用过多担心
- hdu 2204 Eddy's爱好
- 【Python ----代码规范 】
- npm的插件如何直接在html中使用,webpack中html-webpack-plugin插件的使用(生成多个html页面,引入不一样的js文件)...
- 计算机毕设——中文分词方法研究与实现
- 社交网络里的高级钓鱼攻击
- Generator函数语法
- 特定领域知识图谱融合方案:文本匹配算法ERNIE-Gram单塔等诸多模型【_副本