最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
NetBeans下java使用OpenCV的例子
时间:2014-04-29 编辑:简简单单 来源:一聚教程网
本文将帮助一些喜欢使用java和OpenCV环境的开发人员。这个程序完全用netbeans 6.9.1制作而成。该应用显示了如何在netbeans环境下使用OpenCV.在这个实例中,为了从网络摄像头或者视频文件中捕获到视频,用到了多线程的概念。本实例完整的展示了如何使用netbeans创建程序。本篇文章中,我揭示了如何配置netbeans来执行OpenCV的程序。
OpenCV2.4.8支持java开发,从2.4.4开始,opencv才开始支持java开发。OpenCV 2.4.4和OpenCV 2.4.6并不支持从文件中捕捉视频的方法。它们并不支持读取视频文件。在这个工程中,opencv将读取AVI格式的视频文件。
OpenCV
它的含义是跨平台计算机视觉库。他被设计的初衷是为了处理实时系统的高效内存处理。它由优化过的c/c++编写而成。它实现了多核处理的功能。在图像处理中,它向开发者展示了颠覆性的性能。
笼统来讲,OpenCV使用了校准技术(摄像头校准),特征识别与跟踪(光流),模型分析(几何学,轮廓处理),动作分析(动作模板,估量值),3D重现(影像变形),对象分割和识别(直方图,内嵌隐藏马尔科夫模型,固有对象)的算法。该库的本质特性由函数展现,并且处理结果的质量也属上乘。
OpenCV基础:如何使用?
配置Netbeans IDE:
下面的步骤展示了如何在netbeans6.9.1中配置OpenCV 2.4.8。首先,创建一个工程。之后选择类库在工程窗口中显示。之后按照下面的步骤处理。netbeans IDE
步骤 1:添加类库
从netbeans工程中,选择类库。邮件类库,单击“Add Library”,选择Libraries文件夹,邮件Libraries,单击Add Library。
步骤 2:创建类库
单击“Create”按钮来创建新的类库。输入类库名称,例如“OpenCV2.4.8”。单击“OK”按钮
代码
首先,声明所有变量和重要的对象,以便使用:
代码如下 | 复制代码 |
private DaemonThread myThread = null; int count = 0; VideoCapture webSource = null; Mat frame = new Mat(); MatOfByte mem = new MatOfByte(); String File_path=""; |
Java提供了内置的多线程编程。一个多线程程序包含两个或者多个可以同时运行的代码块。每个这样的代码块都被调用为一个线程。之后,每一个线程定义一个单独的路径来执行该代码块。一个多线程的程序是一个多任务程序的实例。多线程的要求比多任务稍微少一些。
多线程部分的宫被用来一帧一帧展示视频。一单单击“Start”按钮,该功能将并发执行。单击“Stop”按钮,该功能将被终止。
创建一个线程
java定义了两种方式来创建线程:
你可以使用Runnable接口实现。
你可以通过扩展Thread类自身来实现
用Runnable创建线程
创建线程最简单的方式就是创建一个实现Runnable接口的类。为了实现Runnable接口,该类需要只实现一个run()方法。该方法的声明如下:
1
代码如下 | 复制代码 |
public void run() |
你需要在run()方法中定义一个包含新线程的代码块。你必须要明白的是:run()方法可以像主线程那样,调用其他方法,使用其他类并且可以声明变量。
在你创建一个实现Runnable接口的类后,你将在那个类之中实例化一个类型为Thread的对象。Thread定义了一系列构造函数。我们将要使用的构造函数,如下所示:
代码如下 | 复制代码 |
Thread(Runnable threadOb, String threadName) ; |
这里,threadOb是一个实现Runnable接口的实例,threadName是新线程的名称。
当心线程创建完毕后,它将不再停止运行,直到你调用在线程内定义的start( )方法。start( )方法如下:
代码如下 | 复制代码 |
|
下面的run函数从网络摄像头或者视频文件中,按帧抓取视频。该过程是同步的。
代码如下 | 复制代码 |
public void run() { synchronized(this) { while(runnable) { if(webSource.grab()) { try { webSource.retrieve(frame); Highgui.imencode(".bmp", frame, mem); Image im = ImageIO.read(new ByteArrayInputStream(mem.toArray())); BufferedImage buff = (BufferedImage) im; Graphics g=jPanel1.getGraphics(); if (g.drawImage(buff, 0, 0, getWidth(), getHeight() -150 , 0, 0, buff.getWidth(), buff.getHeight(), null)) if(runnable == false) { System.out.println("Going to wait()"); this.wait(); } } catch(Exception ex) { System.out.println("Error"); } } } } } |
兴趣点
相关文章
- SpringBoot测试配置属性与web启动环境解析 10-24
- vue中将el-switch值true、false改为number类型的1和0解析 10-24
- Vue中的路由配置项meta使用解读 10-24
- SpringBoot自定义bean绑定解析 10-24
- SpringBoot常用计量与bean属性校验和进制数据转换规则解析 10-24
- 工厂方法在Spring框架中的运用介绍 10-24