OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理计算机视觉以及模式识别程序。该程序库也可以使用英特尔公司的IPP进行加速处理。 ----摘自维基百科http://zh.wikipedia.org/wiki/OpenCV

在本例中在Windows系统中采用Java+Eclipse,采用OpenCV-2.4.5库,编写一段简单的人脸识别代码。

首先,下载OpenCV-2.4.5.exe,进行安装,实际上只是解压而已。

然后将jar包导入Eclipse,jar包路径为opencv解压目录中的opencv\build\java\opencv-245.jar。

接下来导入opencv库,参考下面的步骤:

Eclipse:external JAR

Eclipse:external JAR

Eclipse:external JAR

084148647.jpg

084240653.jpg

接下来,修改ClassPath中的opencv-2.4.5中的Native library location为opencv解压目录中的opencv\build\java\x64(64位操作系统的路径,如果是32位操作系统请选择opencv\build\java\x86路径)。

084448407.jpg


eclipse开发环境搭建成功之后就可以编写代码进行人脸识别了,代码样例Test.java如下:

package com.tcl.uviewer.features.featuresImpl;


import org.opencv.core.Core;

import org.opencv.core.Mat;

import org.opencv.core.MatOfRect;

import org.opencv.core.Point;

import org.opencv.core.Scalar;

import org.opencv.highgui.Highgui;

import org.opencv.objdetect.CascadeClassifier;


public class Test

{


public static void detectFace(String p_w_picpathPath)

{

System.out.println("\nRunning DetectFaceDemo");


// 导入opencv的库

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);


// 从配置文件lbpcascade_frontalface.xml中创建一个人脸识别器,该文件位于opencv安装目录中

CascadeClassifier faceDetector = new CascadeClassifier(

"C:/lbpcascade_frontalface.xml");

Mat p_w_picpath = Highgui.imread(p_w_picpathPath);


// 在图片中检测人脸

MatOfRect faceDetections = new MatOfRect();

faceDetector.detectMultiScale(p_w_picpath, faceDetections);


System.out.println(String.format("Detected %s faces",

faceDetections.toArray().length));


// 在每一个识别出来的人脸周围画出一个方框

for (org.opencv.core.Rect rect : faceDetections.toArray())

{

Core.rectangle(p_w_picpath, new Point(rect.x, rect.y), new Point(rect.x

+ rect.width, rect.y + rect.height), new Scalar(0, 255, 0));

}


// 将结果保存到文件

String filename = "faceDetection.png";

System.out.println(String.format("Writing %s", filename));

Highgui.imwrite(filename, p_w_picpath);

}


public static void main(String[] args)

{

String p_w_picpathPath = "C:/005.jpg";

Test.detectFace(p_w_picpathPath);

}

}


其中原始图片路径是C:/005.jpg,如下图所示:

085116283.jpg


运行上面的代码,输出如下:

Running DetectFaceDemo

Detected 33 faces

Writing faceDetection.png

表示检测到了33个人脸,输出文件是faceDetection.png,图片如下所示:

085309326.png


至此,一个很简单的人脸识别程序就实现完了,当然opencv的功能远不止如此,有兴趣的话可以继续研究。