opencv用java完成的例子_NetBeans下java使用OpenCV的例子

本篇文章的演示程序是关于如何从摄像头和视频文件(*.AVI) 中捕获视频的工程。本工程是在NetBeans集成环境中用OpenCV实现的。

本文将帮助一些喜欢使用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:创建类库

12860ccb2c254bb5fc41ee52569475cd.png

单击“Create”按钮来创建新的类库。输入类库名称,例如“OpenCV2.4.8”。单击“OK”按钮

步骤 2:创建类库

单击“Create”按钮来创建新的类库。输入类库名称,例如“OpenCV2.4.8”。单击“OK”按钮。

10a20a0ea0e60c9e02c757aa09112ecd.png

步骤 3:定制类库

选择Classpath标签,来添加类的路径。单击"Add JAR/Folder"来添加类的路径。选择文件路径"c:opencvuildjavaopencv-248.jar"。单击“OK”按钮。

94611bb7f2a52481cb63bb5cf69f922a.png

步骤 4:添加类库

选择配置库,例如"opencv2.4.8"。单击"Add Library"按钮来添加雷杜到工程目录中。

a9b009ae47aa6595729eb5b7289907cb.png

步骤 5:工程属性

选择工程,右键"Properties"。选择"Run" option, Change VM options to add native library "-Djava.library.path="C:opencvuildjava�""。

c71c760717bffef91ecea55cc583c895.png

代码

首先,声明所有变量和重要的对象,以便使用:

 代码如下复制代码
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( )方法如下:

 代码如下复制代码

void 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");

}

}

}

}

}

兴趣点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值