java+opencv人脸_使用java版本的opencv实现人脸检测

本文介绍了如何在Java环境下利用OpenCV进行人脸识别。通过导入lbpcascade_frontalface.xml过滤器文件,使用CascadeClassifier进行人脸检测,对图片进行处理并显示结果。提供了完整的代码示例,包括Main和DetectFaceDemo类,可以检测并标注图像中的人脸。
摘要由CSDN通过智能技术生成

上一篇小沃给大家讲解了一下java + eclipse + opencv环境搭建的方法,这一篇小沃给大家讲讲如何通过java + opencv实现人脸检测。

如果关于搭建最简单的opencv工程还有什么不明白的,请直接去看上一篇文章。

下面,小沃就来讲讲如何实现java下的人脸检测。

一、导入过滤器文件

这里我们所使用的过滤器是在源代码中的build -> etc -> lbpcascades -> lbpcascade_frontalface.xml文件。

首先我们将它拖到工程目录的src文件夹中去。

ea18d8c9e5c1929a78e4cfe2ca4f3246.png

二、获取相关资料

1.获取过滤器

CascadeClassifier faceDetector = new CascadeClassifier(getClass().getResource("/lbpcascade_frontalface.xml").getPath().substring(1));

2.获取需要处理的图片

Mat image = Imgcodecs.imread(filepath);//filepath是需要处理的图片的绝对路径

三、使用过滤器处理图片,并且将图片存到MatOfRect对象中去

MatOfRect faceDetections = new MatOfRect();

faceDetector.detectMultiScale(image, faceDetections);

四、解析得到的结果

System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));//打印当前图片有几张脸

for (Rect rect : faceDetections.toArray()) {//分离出人脸的相关信息

Imgproc.rectangle(image, 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));

Imgcodecs.imwrite(filename, image);

这样就能找到人脸了。

下面贡献一段代码,注:如果想运行这段代码,需要将图片lena.png放到src下。

Main.javapackage facedetect;

import org.opencv.core.Core;

public class Main {

public static void main(String[] args) {

// TODO Auto-generated method stub

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

DetectFaceDemo detectfacedemo = new DetectFaceDemo();

detectfacedemo.run();

}

}

DetectFaceDemo.javapackage facedetect;

import org.opencv.core.Mat;

import org.opencv.core.MatOfRect;

import org.opencv.core.Point;

import org.opencv.core.Rect;

import org.opencv.core.Scalar;

import org.opencv.imgcodecs.Imgcodecs;

import org.opencv.imgproc.Imgproc;

import org.opencv.objdetect.CascadeClassifier;

public class DetectFaceDemo {

public void run() {

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

// Create a face detector from the cascade file in the resources

// directory.

String xmlpath = getClass().getResource("/lbpcascade_frontalface.xml").getPath().substring(1);

System.out.println(xmlpath);

CascadeClassifier faceDetector = new CascadeClassifier(xmlpath);

String srcImagepath = getClass().getResource("/lena.png").getPath().substring(1);

System.out.println(srcImagepath);

Mat image = Imgcodecs.imread(srcImagepath);

// Detect faces in the image.

// MatOfRect is a special container class for Rect.

MatOfRect faceDetections = new MatOfRect();

faceDetector.detectMultiScale(image, faceDetections);

System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));

// Draw a bounding box around each face.

for (Rect rect : faceDetections.toArray()) {

Imgproc.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0));

}

// Save the visualized detection.

String filename = "faceDetection.png";

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

Imgcodecs.imwrite(filename, image);

}

}

运行效果如下图:

aa90e4ea276c3d0fc226bc61985ffb02.png

运行前

389d825933b5738c5bd7fa60063c7e48.png

运行后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值