第1章
基于JavaVM的OpenCV
几年前,在去上海的旅途中,一位好友送给我一本很厚的书,是介绍OpenCV的。书中包含了海量的图像处理方法、实时视频分析例子和引人入胜的深度解析,于是我迫不及待地配置好环境来测试书中的程序。
众所周知,OpenCV是开源计算机视觉(Open Source Computer Vision)的英文简写。作为一个开源库,OpenCV提供可直接使用的高级图像处理算法,既包括简单易用的高级图像操作,也包括形状识别以及实时视频监测和分析功能。
OpenCV中最核心的内容是多维矩阵对象,叫作Mat。通过本书的学习,Mat将成为我们最熟悉的朋友。在许多攻略中,输入的对象是Mat,处理的内容是Mat,输出的结果也是Mat。
虽然Mat即将成为我们的好朋友,但是作为一个C++对象,它并不是很好相处。你必须重新编译、安装和小心地配置任何使用Mat的新环境。
但是Mat可以被打包。
Mat虽然在本地运行,但它可以被神不知鬼不觉地加载到Java虚拟机中运行。
第1章将通过介绍Java虚拟机中的多种语言让你开始上手使用OpenCV,当然包括Java语言,也包括通俗易懂的Scala语言和谷歌最爱的Kotlin语言。
为了使用同样的方法来运行不同的语言,你会首先(重新)认识一种Java编译工具,叫作Leiningen,之后利用它来运行简单的OpenCV函数。
第1章是第2章的入门基础。第2章的内容是相似的基于JVM的Clojure语言,可以为富有创造性的OpenCV代码带来即时的视觉反馈。
1.1 初识Leiningen
问题定义
有一句名言是“一次编写,随处运行”,也就是说,在不同的机器上,可以用同样简单便捷的方法来编译和运行Java程序。当然,你总是可以使用最原始的javac命令来编译Java代码,然后使用单纯的Java在命令行中运行编译过的代码,但现在已经是21世纪了,我们应该寻找更有效的方法。
无论使用何种编程语言,手动配置工作环境都是一项大工程。而且当你完成配置之后,很难与他人分享胜利果实。
使用编译工具,可以用简单的方法定义项目所需的依赖,同时也可帮助其他用户更快地上手。
接下来,我们介绍一个