java通過jni調用opencv處理圖像

1. 建立java文件

public class getImageFeature {
     static{
      System.loadLibrary("getImageFeatureDll"); 
     }
     public native int getImageFeatureByName(String filename);
     public native int getImageFeatureByMemory();

     public static void main(String[] args) {
      getImageFeature test=new getImageFeature();
      String filename = "D:/testpic/6af1399a64d10a399ad3247c01656bb7.jpg";
      System.out.println(test.getImageFeatureByName(filename));  
     }
    }

2. 切換到工程src文件夾

javac getImageFeature.java
javah getImageFeature
生成 getImageFeature.h 文件

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

#ifndef _Included_getImageFeature
#define _Included_getImageFeature
#ifdef __cplusplus
extern "C" {
#endif
    /*
    * Class:     getImageFeature
    * Method:    getImageFeatureByName
    * Signature: (Ljava/lang/String;)I
    */
    JNIEXPORT jint JNICALL Java_getImageFeature_getImageFeatureByName
        (JNIEnv *, jobject, jstring);

    /*
    * Class:     getImageFeature
    * Method:    getImageFeatureByMemory
    * Signature: ()I
    */
    JNIEXPORT jint JNICALL Java_getImageFeature_getImageFeatureByMemory
        (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

3. VS2013建立dll工程

添加getImageFeature.h 頭文件,再添加getImageFeature.cpp文件,實現對應函數(工程屬性中需包含jdk下的include目錄)
C:\Program Files\Java\jdk1.8.0_20\include
C:\Program Files\Java\jdk1.8.0_20\include\win32

#include "getImageFeatureDll.h"
#include <opencv2/opencv.hpp>

/*
* Class:     getImageFeature
* Method:    getImageFeatureByName
* Signature: (Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL Java_getImageFeature_getImageFeatureByName
(JNIEnv *env, jobject obj, jstring filename)
{
    const char *str_filename;
    str_filename = env->GetStringUTFChars(filename, false);

    cv::Mat image = cv::imread(str_filename);
    cv::imshow("test", image);
    cv::waitKey(20000);
    return 0;


}

/*
* Class:     getImageFeature
* Method:    getImageFeatureByMemory
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_getImageFeature_getImageFeatureByMemory
(JNIEnv *, jobject)
{
    return 0;
}



編譯生成對應的dll



4. 執行java程序

將生成dll複製到java工程src文件夾下,java XX 運行程序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章