java中用opencv

  之前写过几篇opencv和mongodb在VS2010下的配置文章。拿mongo来说,使用C++ driver要比java复杂太多。每一个新的project都要配置一遍,即使不算太麻烦。因为我的研究内容要使用opencv,但是实验室其它人做的是text mining,所以java为主,并且大家之间的接口也是老大自己编写的mongo java api。这使得我被迫不停在C++于java中切换写程序,调用数据库。我还毕竟只算新手,难免会出现点小问题和不方便。


  这个月opencv终于又发布了新版本,虽然是个2.4.4 beta。这其中最主要的变化就是对桌面java的支持。和google那个javacv项目不一样,官网说主要两个优点:

1. JAVA的驱动具备所有最新功能。(白话就是最新版发布时就可以用java驱动调用最新功能,无需等待第三方重写。)

2. 与C++的驱动基本一致。(就是功能函数基本一样,习惯的人会很容易上手。)


  最近闲暇时下载了最新的版本试用,觉得java的driver确实简单。Eclipse这种“傻瓜”一点的东西和VS相比会更讨我喜欢。官网有个简单介绍:

http://docs.opencv.org/2.4.4-beta/doc/tutorials/introduction/desktop_java/java_dev_intro.html


配置极为简单,将build\java\x64下的jar文件加入项目并把该路径配置进Native library location,在主函数中调用 

System.loadLibrary("opencv_java244");

配置好后可以按官网的例子进行试验。上一次写的原创文章里说了mat类访问元素的问题,所以先从这里下手。对元素赋值可以使用m.put(row,col,data)进行,但是读取出来就有点意思了。初始一个类型为CV_8UC1的矩阵,可以用一个double数组来   data=m.get获取元素,即使你的矩阵不是double,但是也只能用这个函数这个容器。至于m.get(row,col,data)这个方法,就要和上一篇帖子说的一样,必须对应int-32s,double-64f来使用。也许opencv已经觉得这种小case都约定俗成就不用说了,可对新手难免会造成困惑。接下来就更有意思了,我们既然访问的元素是单个,为什么非要使用数组呢?没有其它办法么。去opencv官网的Questions forum搜了下,有用资料不多,毕竟版本更新不到一个月。

http://answers.opencv.org/question/5/how-to-get-and-modify-the-pixel-of-mat-in-java/

帖子的答复中有一行代码 

byte buff[] = new byte[m.total() * m.channels()];
初始一个和矩阵元素一样多的数组,但是你一旦使用get方法来访问元素时,返回的只是一个,所以数组大小最后总是1。至于为何要初始化大小或者为何必须使用数组,目前我仍然在探究中。官网的api documentation中对这几个方法没有任何说明,也许这就是beta中还有待改善的地方吧。


Opencv官方支持java对不少人来说都是一大好事,毕竟简化了不少工作,让想学习的人更简单上手。初体验先写到这里,以后的心得再慢慢加入。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值