Java:opencv&;openni

Java:opencv&;openni,java,opencv,openni,Java,Opencv,Openni,我想知道是否有人能够在java中将openni与opencv结合使用? 例如,您在IplImage中获取深度流等。。。我目前正在尝试这样做,但我不知道从哪里开始 如果有人愿意分享他们的知识或代码,我将不胜感激 到目前为止,我的代码是: / 虽然我有一个黑色的框架。所以它还不起作用 当我没有像这里那样初始化IplImage,而是只初始化IplImage depthImage=new IplImage();我得到这个错误: Exception in thread "main" java.lang.N

我想知道是否有人能够在java中将openniopencv结合使用? 例如,您在IplImage中获取深度流等。。。我目前正在尝试这样做,但我不知道从哪里开始

如果有人愿意分享他们的知识或代码,我将不胜感激

到目前为止,我的代码是:

/

虽然我有一个黑色的框架。所以它还不起作用

当我没有像这里那样初始化IplImage,而是只初始化IplImage depthImage=new IplImage();我得到这个错误:

Exception in thread "main" java.lang.NullPointerException
at java.awt.image.BufferedImage.<init>(BufferedImage.java:613)
at com.googlecode.javacv.cpp.opencv_core$IplImage.getBufferedImage(opencv_core.java:1005)
at com.googlecode.javacv.cpp.opencv_core$IplImage.getBufferedImage(opencv_core.java:931)
at com.googlecode.javacv.CanvasFrame.showImage(CanvasFrame.java:331)
at kitouch.KiTouch.paint(KiTouch.java:138)
at kitouch.kiTouchApp.main(kiTouchApp.java:21)
线程“main”java.lang.NullPointerException中的异常 位于java.awt.image.buffereImage。(buffereImage.java:613) 在com.googlecode.javacv.cpp.opencv_core$IplImage.getBufferedImage(opencv_core.java:1005) 在com.googlecode.javacv.cpp.opencv_core$IplImage.getBufferedImage(opencv_core.java:931) 位于com.googlecode.javacv.CanvasFrame.showImage(CanvasFrame.java:331) 在kitouch.kitouch.paint(kitouch.java:138) 在kitouch.kiTouchApp.main(kiTouchApp.java:21)
提前谢谢

我确实使用了OpenNI和Java,但使用和可用的包装器(和)目前可以满足我的适度需求。 下面是一个非常基本的示例:

import hypermedia.video.*;
import SimpleOpenNI.*;

SimpleOpenNI  ni;
OpenCV cv;
PImage user;
void setup()
{
  ni = new SimpleOpenNI(this);
  ni.enableScene();
  background(200,0,0);
  strokeWeight(4);
  size(ni.sceneWidth() , ni.sceneHeight()); 
  cv = new OpenCV( this );
  cv.allocate(width,height);
}
void draw()
{
  //OpenNI
  ni.update();
  user = ni.sceneImage(); 
  //OpenCV
  cv.copy(user);
  cv.blur( OpenCV.BLUR, 17 );
  Blob[] blobs = cv.blobs( width,height, OpenCV.MAX_VERTICES, true, OpenCV.MAX_VERTICES*4 );

  //diplay
  image(cv.image(),0,0);
  //*
  fill(255);
  for(Blob b : blobs){
    beginShape();
      for(java.awt.Point p : b.points) vertex(p.x,p.y);
    endShape(CLOSE);
  }
  //*/
}
请注意,此OpenCV包装器使用OpenCV 1.0,并且您可能希望使用自己的Java类,而不是使用处理库。在这种情况下,尝试包装器。 关于深度流,如果您查看OpenNI附带的
org.OpenNI.Samples.SimpleViewer
类,您会注意到OpenNI中的深度字节被写入一个BuffereImage,我认为它可以与OpenCV集成,等等

 public SimpleViewer() {

        try {
            scriptNode = new OutArg<ScriptNode>();
            context = Context.createFromXmlFile(SAMPLE_XML_FILE, scriptNode);

            depthGen = DepthGenerator.create(context);
            DepthMetaData depthMD = depthGen.getMetaData();

            histogram = new float[10000];
            width = depthMD.getFullXRes();
            height = depthMD.getFullYRes();

            imgbytes = new byte[width*height];

            DataBufferByte dataBuffer = new DataBufferByte(imgbytes, width*height);
            Raster raster = Raster.createPackedRaster(dataBuffer, width, height, 8, null);
            bimg = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
            bimg.setData(raster);

        } catch (GeneralException e) {
            e.printStackTrace();
            System.exit(1);
        }
    }
publicsimpleviewer(){
试一试{
scriptNode=newoutarg();
context=context.createFromXmlFile(示例XML文件,scriptNode);
depthGen=DepthGenerator.create(上下文);
DepthMetaData depthMD=depthGen.getMetaData();
直方图=新浮动[10000];
宽度=depthMD.getFullXRes();
高度=深度。getFullYRes();
imgbytes=新字节[宽度*高度];
DataBufferByte dataBuffer=新的DataBufferByte(单位:百万字节,宽度*高度);
光栅=光栅.createPackedRaster(数据缓冲区,宽度,高度,8,空);
bimg=新的BuffereImage(宽度、高度、BuffereImage.TYPE_BYTE_GRAY);
bimg.setData(光栅);
}捕获(一般异常e){
e、 printStackTrace();
系统出口(1);
}
}

我确实使用了OpenNI和Java,但使用和可用的包装器(和)目前可以满足我的适度需求。 下面是一个非常基本的示例:

import hypermedia.video.*;
import SimpleOpenNI.*;

SimpleOpenNI  ni;
OpenCV cv;
PImage user;
void setup()
{
  ni = new SimpleOpenNI(this);
  ni.enableScene();
  background(200,0,0);
  strokeWeight(4);
  size(ni.sceneWidth() , ni.sceneHeight()); 
  cv = new OpenCV( this );
  cv.allocate(width,height);
}
void draw()
{
  //OpenNI
  ni.update();
  user = ni.sceneImage(); 
  //OpenCV
  cv.copy(user);
  cv.blur( OpenCV.BLUR, 17 );
  Blob[] blobs = cv.blobs( width,height, OpenCV.MAX_VERTICES, true, OpenCV.MAX_VERTICES*4 );

  //diplay
  image(cv.image(),0,0);
  //*
  fill(255);
  for(Blob b : blobs){
    beginShape();
      for(java.awt.Point p : b.points) vertex(p.x,p.y);
    endShape(CLOSE);
  }
  //*/
}
请注意,此OpenCV包装器使用OpenCV 1.0,并且您可能希望使用自己的Java类,而不是使用处理库。在这种情况下,尝试包装器。 关于深度流,如果您查看OpenNI附带的
org.OpenNI.Samples.SimpleViewer
类,您会注意到OpenNI中的深度字节被写入一个BuffereImage,我认为它可以与OpenCV集成,等等

 public SimpleViewer() {

        try {
            scriptNode = new OutArg<ScriptNode>();
            context = Context.createFromXmlFile(SAMPLE_XML_FILE, scriptNode);

            depthGen = DepthGenerator.create(context);
            DepthMetaData depthMD = depthGen.getMetaData();

            histogram = new float[10000];
            width = depthMD.getFullXRes();
            height = depthMD.getFullYRes();

            imgbytes = new byte[width*height];

            DataBufferByte dataBuffer = new DataBufferByte(imgbytes, width*height);
            Raster raster = Raster.createPackedRaster(dataBuffer, width, height, 8, null);
            bimg = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
            bimg.setData(raster);

        } catch (GeneralException e) {
            e.printStackTrace();
            System.exit(1);
        }
    }
publicsimpleviewer(){
试一试{
scriptNode=newoutarg();
context=context.createFromXmlFile(示例XML文件,scriptNode);
depthGen=DepthGenerator.create(上下文);
DepthMetaData depthMD=depthGen.getMetaData();
直方图=新浮动[10000];
宽度=depthMD.getFullXRes();
高度=深度。getFullYRes();
imgbytes=新字节[宽度*高度];
DataBufferByte dataBuffer=新的DataBufferByte(单位:百万字节,宽度*高度);
光栅=光栅.createPackedRaster(数据缓冲区,宽度,高度,8,空);
bimg=新的BuffereImage(宽度、高度、BuffereImage.TYPE_BYTE_GRAY);
bimg.setData(光栅);
}捕获(一般异常e){
e、 printStackTrace();
系统出口(1);
}
}

目前我正在研究BuffereImage,我相信BuffereImage可以转换为IplImage。哦,顺便说一句,我使用的是javacvSure,谷歌搜索JavaiPlimage应该会让你明白。没错,但我尝试了一个内置转换:“depthImage.createFrom(bimg);帧。显示图像(深度图像);'我在updatedepth函数中这样做。但是我得到了一个空指针。所以我必须继续搜索我已经在问题中添加了我的代码,也许你可以看看?(我没有得到一个空指针,只有一个黑屏)不幸的是,我现在不能在我的电脑上测试,但是你能检查一下你是否能在屏幕上显示bimg(或来自bimg的缓冲区图像)吗?如果这样做有效,那么问题要么在于depthImage.createFrom(),要么在于字节数组没有被理解,但首先,确保bimg不是null/空的。HTH目前我正在研究BuffereImage,我相信BuffereImage可以转换为IplImage。哦,顺便说一句,我使用的是javacvSure,谷歌搜索JavaiPlimage应该会让你明白。没错,但我尝试了一个内置转换:“depthImage.createFrom(bimg);帧。显示图像(深度图像);'我在updatedepth函数中这样做。但是我得到了一个空指针。所以我必须继续搜索我已经在问题中添加了我的代码,也许你可以看看?(我没有得到一个空指针,只有一个黑屏)不幸的是,我现在不能在我的电脑上测试,但是你能检查一下你是否能在屏幕上显示bimg(或来自bimg的缓冲区图像)吗?如果这样做有效,那么问题要么在于depthImage.createFrom(),要么在于字节数组没有被理解,但首先,确保bimg不是null/空的。嗯