您的位置:首页 > 编程语言 > Java开发

OpenCV程序封装为64位DLL给Java调用

2017-09-21 17:08 330 查看

OpenCV程序封装为64位DLL给Java调用

//最近两周一直在忙一件事,刚刚做完给Java调用成功了,Mark一下。

做图像处理的经常用到OpenCV这个第三方库,函数好写,打包不好打,尤其打包成64位dll时。下面就自己这段时期的工作,分享一下,如何封装为64位dll的并且如何给Java调用的

1,封装为64位DLL

首先要在win x64环境下,配置好属性。由于之前一直采用自己配置的属性页方式,比较懒,依赖于平台和本地环境。给封装带来了极大的不便利(但是自己开发时候很舒服,只要添加属性页就可以了,不用每次都配置,方法来源于《OpenCV2计算机视觉编程手册》chapter 1.3)。所以,一定要自己加载opencv的lib。可以先把程序做好,功能实现了之后,再考虑摘依赖的lib。可以使用Dependency Walker软件寻找你用到了哪些lib文件。



如图,标问号的说明没找到dll,这样在几层之后的dll貌似也没有打包的必要。这个软件使用很简单:打开此软件的exe,选择你要分析的exe打开即可。确保你的功能实现了,exe没有错误。

然后,在生成DLL的过程中,将使用到的opencv dll文件放入文件夹中,注意,要把.hpp、lib、dll一起放好。在引用dll时,有多种方法。我用到的是#include“.hpp” #pragram comment(lib,”.lib”),这样就把对应的DLL加载进去了。注意 Debug模式和Release模式用到的Dll不同,d.lib,*d.dll与.lib,*.dll有什么区别不再赘言。32位与64位也不同。注意区别。

在VS设置中,我遇到了一个错误,_MSC_VER,value值不匹配问题。

最后逼的没办法,换了对应的VS,解决。

在属性表—C/C++—代码生成中,运行库的设置也会产生影响。

分别生成DLL和LIB之后,要带着.h文件作为一个交付的包。我自己调用了一遍,处理没问题了才放心交付。

最后,出现的

error LNK2019: 无法解析的外部符号 “public: __cdecl Imf::Header::Header(int,int,float,class Imath::Vec2 const &,float,enum Imf::LineOrder,enum Imf::Compression)” (??0Header@Imf@@QEAA@HHMAEBV?Vec2@M@Imath@@MW4LineOrder@1@W4Compression@1@@Z),该符号在函数 "public: virtual bool __cdecl cv::ExrEncoder::write(class cv::Mat const &,class std::vector<int,class std::allocator<int> > const &)" (?write@ExrEncoder@cv@@UEAA_NAEBVMat@2@AEBV?vector@HV?$allocator@H@std@@@std@@@Z) 中被引用

这样的错误,是因为有lib文件没包含。在opencv自带的staticlib中会找到大部分,有这个方向就能够解决这类问题。

2,Java如何调用DLL可以参考此链接内容。网上内容驳杂,这个写的不错。

http://blog.csdn.net/jiangwei0910410003/article/details/17465085
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: