java调用(c+opencv)的DLL

     郁闷了半天,终于解决了java本地调用c+opencv写的一个小程序。中间遇到了很多麻烦,在这写下来希望能给做相同工作的朋友一点帮助。。。

首先编写java代码,确定native函数格式。如下:

public class ImageParseNative{
 public int a;
 ImageParseNative()
 {
  a=10;
 }

 public native  void parse(String path, double[] average_img, double[] stdes_img);
 static {
  System.loadLibrary("ImageParseNative");
 }
 public static void main(String[] args)
 {
  ImageParseNative m=new ImageParseNative();
  String path="29_3.jpg";
  double[] average_img=new double[320];
  double[] stdes_img=new double[320];
  m.parse(path, average_img, stdes_img);
 }

}

parse函数的主要功能是用c+opencv程序实现一个提取图片的特征。

接下来是通过javac和javah命令生成ImageParseNative.h文件。注意:此处我写的文件放在了缺省包下,如果有包,在javah时还要对应好包的级别才能顺利生成ImageParseNative.h文件。

生成的ImageParseNative.h文件内容如下:

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

#ifndef _Included_ImageParseNative
#define _Included_ImageParseNative
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     ImageParseNative
 * Method:    parse
 * Signature: (Ljava/lang/String;[[D[[D)V
 */
JNIEXPORT void JNICALL Java_ImageParseNative_parse
  (JNIEnv *, jclass , jstring, jdoubleArray, jdoubleArray);

#ifdef __cplusplus
}
#endif
#endif

用vs2008新建一个dll工程。导入生成的ImageParseNative.h的头文件。然后新建ImageParseNative.cpp文件来实现头文件里的函数。此处我实现函数比较复杂,就不列出内容。写好后,生成dll文件,关键在下列三处:

(1)一定要用Release版来编译生成dll,因为用Debug生成的用java调用时会出现“无法启动应用程序。。。”之类的错误。我就是这里郁闷了好久

(2)选择MT模式运行时库来编译。

(3)opencv的lib库要发布版的,因为此处我们是用Release版来编译的。

这样生成的DLL文件java调用时才不会出错。如果此处不是很明白的,可以加我好友,一起解决。。。

把生成的DLL文件和opencv用到的dll文件(cv210.dll cxcore210.dll highgui210.dll)一起拷贝到java工程根目录下。运行java程序,ok,大功告成!!!

结合网上其它资料,以本文为注意点,一定可以完成大家想完成的功能。。。我把我的程序也放在了csdn上,大家可以下载借鉴一下。希望对大家有用。。。

http://download.youkuaiyun.com/user/zsoftdevelop

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值