一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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”按钮

 

步骤 2:创建类库
单击“Create”按钮来创建新的类库。输入类库名称,例如“OpenCV2.4.8”。单击“OK”按钮。
NetBeans下java使用OpenCV的例子
步骤 3:定制类库
选择Classpath标签,来添加类的路径。单击"Add JAR/Folder"来添加类的路径。选择文件路径"c:opencvuildjavaopencv-248.jar"。单击“OK”按钮。
NetBeans下java使用OpenCV的例子
步骤 4:添加类库
选择配置库,例如"opencv2.4.8"。单击"Add Library"按钮来添加雷杜到工程目录中。
NetBeans下java使用OpenCV的例子
步骤 5:工程属性
选择工程,右键"Properties"。选择"Run" option, Change VM options to add native library "-Djava.library.path="C:opencvuildjava�""。

NetBeans下java使用OpenCV的例子

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

 

 代码如下 复制代码
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");
             }
        }
     }
  }
}

兴趣点

 

热门栏目