从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开发教程相关推荐

  1. java安卓app开发教程_[Android教程] Cordova开发App入门(一)创建android项目

    前言 Apache Cordova是一个开源的移动开发框架.允许使用标准的web技术-HTML5,CSS3和JavaScript做跨平台开发. 应用在每个平台的具体执行被封装了起来,并依靠符合标准的A ...

  2. java安卓app开发教程,Android app开发入门 —— your 'Hello, World'

    从这篇可以掌握到 Android app开发环境的搭建 开发工具介绍及安装 创建你的"Hello, World" 工程结构的介绍 工程gradle配置 简单布局 代码sample ...

  3. Seata 新特性,APM 支持 SkyWalking,java区块链开发教程pdf

    Seata 融入 SkyWalking 监控后,就有了 APM 特性,用户在定位 Seata 分布式事务的问题时,可以通过分布式链路.机器指标.日志内容等多个维度进行问题剖析,实现定位问题的提效. ​ ...

  4. java区块链开发教程,原来SqlSession只是个甩手掌柜

    前言 我们在执行Sql之前,需要先获取SqlSession对象,但是我们也提到了SqlSession下面还有四大对象,所以SqlSession只是个甩手掌柜,真正干活的却是Executor等四大对象: ...

  5. Java组件化开发教程!工信部java软件开发工程师证书

    这些面试题包含哪些内容? 借花献佛!朋友干了5年整的Java面试官,给我分享了一份面试官最爱问的Java面试题这份面试题包含了 19 个模块:Java 基础.容器.多线程.反射.对象拷贝.Java W ...

  6. Java组件化开发教程!java工程师求职简历word模板

    什么是数据脱敏 先来看看什么是数据脱敏?数据脱敏也叫数据的去隐私化,在我们给定脱敏规则和策略的情况下,对敏感数据比如 手机号.银行卡号 等信息,进行转换或者修改的一种技术手段,防止敏感数据直接在不可靠 ...

  7. java移动端开发教程视频_Java Web开发-项目部分(中国移动科技综合管理系统)视频教程 - JavaWeb - Java - 私塾在线 - 只做精品视频课程服务...

    第01节课:进行整体课程概览:参看其他项目,总结需要实现的功能:讲解本次项目练习要实现的功能:基本的业务功能介绍 第02节课:页面布局:框架使用:页面上菜单的使用:项目基本的数据字典:构建包结构和划分 ...

  8. Android开发教程JAVA基础(汇总)

    Android游戏开发视频教程(汇总) Android开发教程JAVA基础之Java 概述 Android开发教程JAVA基础之标示符.关键字1 Android开发教程JAVA基础之标示符.关键字2 ...

  9. 后台管理系统怎么实现操作日志原理_springboot角色权限后台管理系统脚手架实战开发教程包含完整源码...

    自从猿来入此发布实战开发教程以来,我们截至目前一共发布了22个Java实战项目开发教程,从最基础的Java控制台实战项目到数据库封装教程再到swing的单机项目教程.servlet的web实战教程.s ...

最新文章

  1. 你的「所见所闻」,才是电视的核心竞争力
  2. ORA-00904 的解决
  3. PyTorch 实现 VAE 变分自编码器 含代码
  4. (Java集合框架)集合框架概述和Collection常用功能及遍历
  5. Spring Cloud Alibaba基础教程:支持的几种服务消费方式(RestTemplate、WebClient、Feign)
  6. 坐地铁可以刷学生卡吗_在沈阳办的公交卡能刷地铁吗?是学生卡,卡上写的是盛京通...
  7. feedback.php,feedback.php
  8. GAN —— 《Generative Adversarial Nets》
  9. HDU-4618 Palindrome Sub-Array 暴力枚举
  10. 聚类算法-K均值(K-means)
  11. CSS:公共样式(自用)
  12. [hdu5628]Clarke and math(dirichlet卷积)
  13. 计算机考证包括cad吗
  14. 2019年8月 华为鸿蒙,华为2019年开发者大会将于8月9日举行,期待鸿蒙吗?
  15. catia二次开发:检查文件类型 检查部件类型 产品名称 通过交互选择约束两个零件轴系重合 添加自定义属性,MasterShapeRepresentation
  16. CP2102 USB to UART Bridge Controller 驱动安装(windows or Ubuntu)
  17. 反病毒工具-Wireshark
  18. Mand Mobile - 滴滴出品的适用于金融项目的 Vue 移动端 UI 组件库,免费开源、灵活快速、丰富实用
  19. linux 搭建mycat
  20. CWnd::Create和CWnd::CreateEx 区别

热门文章

  1. Codeforces - Good Bye 2020
  2. 怎样在视频流媒体服务器里实现RTSP h265转RTMP?
  3. matlab绿色 不伤眼,蓝光和超清哪个伤眼睛 伤害都很低不用过多担心
  4. hdu 2204 Eddy's爱好
  5. 【Python ----代码规范 】
  6. npm的插件如何直接在html中使用,webpack中html-webpack-plugin插件的使用(生成多个html页面,引入不一样的js文件)...
  7. 计算机毕设——中文分词方法研究与实现
  8. 社交网络里的高级钓鱼攻击
  9. Generator函数语法
  10. 特定领域知识图谱融合方案:文本匹配算法ERNIE-Gram单塔等诸多模型【_副本