如何将Opencv Mat对象从本机c ++返回到java? [英] How to return Opencv Mat object from native c++ to java ?

查看:174
本文介绍了如何将Opencv Mat对象从本机c ++返回到java?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从java程序访问c ++代码。为此,我使用了JNI的概念。

我在java中声明了一个本机方法,其返回类型是opencv的Mat类,如下所示:

  public   native  Mat getFrames(); 



然后使用javah实用程序,我使用命令:javah -jni java_class_name创建了我的java类JNITest.h的c实现(头文件)。此头文件如下:



  / *  不要编辑这个文件 - 它是机器生成的* /  
#include< jni.h>
/ * JNITest类的标题* /

#ifndef _Included_JNITest
#define _Included_JNITest
#ifdef __cplusplus
extern C {
#endif
/ *
*类:JNITest
*方法:getFrames
*签名:()Lorg / opencv / core / Mat;
* /

JNIEXPORT jobject JNICALL Java_JNITest_getFrames(JNIEnv *,jobject);

#ifdef __cplusplus
}
#endif
#endif



我在cpp中实现了这个Java_JNITest_getFrames方法文件如下:



 JNIEXPORT jobject JNICALL Java_JNITest_getFrames(JNIEnv * en,jobject)
{
Mat frame ;
VideoCapture上限( D:\\ImageProcessing\\\\ .jpg);
cap>> frame;
jobject jb;
Mat * ptrImg =& frame;
jb =(jobject)ptrImg;
return jb;
}



但是,上面的代码无效。

那么,如何将opencv Mat类对象转换为这个jobject?

如何返回该对象?

解决方案

请参阅此Stack Overflow问题:将本地代码中的Mat对象返回给OpenCV中的java [ ^ ]。

I want to access c++ code from java program. For that I used concept of JNI.
I declare one native method in java, whose return type is Mat class of opencv, as follows :

public native Mat getFrames();


Then using javah utility, I created c implementation(Header File) of my java class JNITest.h using command : javah -jni java_class_name. This header file is as follows :

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class JNITest */

#ifndef _Included_JNITest
#define _Included_JNITest
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     JNITest
 * Method:    getFrames
 * Signature: ()Lorg/opencv/core/Mat;
 */
JNIEXPORT jobject JNICALL Java_JNITest_getFrames(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif


I implement this Java_JNITest_getFrames method in cpp file as follows:

JNIEXPORT jobject JNICALL Java_JNITest_getFrames(JNIEnv *en, jobject)
{
    Mat frame;
    VideoCapture cap("D:\\ImageProcessing\\1.jpg");
    cap>>frame;
    jobject jb ;
    Mat * ptrImg = &frame;
    jb=(jobject)ptrImg;
    return jb;
}


But, this above code is not working.
So, how to convert opencv Mat class object to this jobject ?
And how do I return that object ?

解决方案

See this Stack Overflow question: "Returning Mat object from native code to java in OpenCV"[^].


这篇关于如何将Opencv Mat对象从本机c ++返回到java?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆