Java & OpenCV (一) ——环境配置及简单程序编写

最近打算学习一下图片处理,不想去搞盗版的MatLab所以考虑学习一下OpenCV。

OpenCV全称Open Source Computer Vision Library,是一个基于BSD开源许可的跨平台计算机视觉库,由一系列C与少量C++编写而成,提供了多种语言的接口,实现了图像处理和计算机视觉的很多通用算法。官网是opencv.org,本身提供免费下载,根据开发平台与版本需求选择即可。

既然是C与C++编写而成的库,第一反应自然而然想到的是使用C或C++去进行编程。怎奈出于玩游戏考虑硬盘空间有限,不想安装Visual Studio,而ubuntu系统在短时间内出于个人原因无法安装,所以在windows环境下放弃了使用C去利用OpenCV编程,转而考虑使用Java。下面开始套路。

第一步自然是安装,从官网上下载下来就好,官网的exe文件运行后会解压出一个OpenCV的文件夹,路径随意你喜欢就好。

第二步自然是配置到开发环境里,如果你使用Java是文本编辑器+命令行的编程模式,大概需要配置一下环境变量之类的,这里我使用的是Eclipse的IDE。创建项目之后右击项目选择Properties,选择Java Build Path,点击窗口右侧的Add Library

Java & OpenCV (一) ——环境配置及简单程序编写_第1张图片

选择User Library

Java & OpenCV (一) ——环境配置及简单程序编写_第2张图片

为这个你自定义的以后可复用的Library起个名字,起好名字后返回之前的界面,为其添加外部jar文件,就是你安装的opencv下的build/java路径下的jar文件

Java & OpenCV (一) ——环境配置及简单程序编写_第3张图片

添加完文件后需要添加配置文件,如果你开发环境是32位就选择x86文件夹的路径,64位则选择x64的,如果像我这样手贱64位的电脑装了个32位的eclipse也请选择32位即x86文件夹

Java & OpenCV (一) ——环境配置及简单程序编写_第4张图片

这些全部配置完,就可以写第一个使用OpenCV的小程序了。我写的是一个将图片二值化并存储的小程序,使用OpenCV也就短短几行。直接上代码

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;

public class HelloWorld {
	public static void main(String[] args) {
		System.loadLibrary(Core.NATIVE_LIBRARY_NAME);  
		Mat img = Highgui.imread("D:\\Document For Test\\origin_image.jpg");
		Imgproc.cvtColor(img, img, Imgproc.COLOR_RGB2GRAY);
        	Imgproc.adaptiveThreshold(img, img, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY_INV, 25, 10);
		Highgui.imwrite("D:\\Document For Test\\new_image.png", img);
	}
}
第一行与我们的程序逻辑无关,但为了运行必须加上,否则会报错java.lang.UnsatisfiedLinkError;第二行很明显是一个读取硬盘中图片文件的工作,其中Mat类是OpenCV中的一个基础类,本身还可以与Java中常用的图片格式进行相互转换,其本质实际是一个矩阵(图片其实就是矩阵啦);第三行是一个将原彩色图转为灰度图的工作,对于二值化来说是必要的;第四行实际就是二值化了,调用的是Imgproc静态类的一个方法,与第三行一样,里面的各个参数将会在以后去了解;最后一行将二值化后的图片写回硬盘。如果不理解二值化是什么意思,看一下图片大概就明白啦

Java & OpenCV (一) ——环境配置及简单程序编写_第5张图片

右边是原图,左边是二值化后的图片。二值化简单地说就是将一个灰度图某阈值以下的像素转为一种颜色,而以上的像素转为另一种颜色,所以在二值化以前需要将原彩色图变为灰度图。

如果不想像上面代码里一样把文件路径硬编码的话,可以将图片放入代码文件父目录下,或者另写一个配置文件说明图片的路径前缀。

以上就是opencv的一个简单入门,关于opencv的其他图像处理操作以及许多细节内容将在之后再介绍。(我他娘又开了一个坑23333)

你可能感兴趣的:(图像处理)