java opencv人脸识别_java基于OpenCV的人脸识别

这篇博客介绍了如何使用Java结合OpenCV库进行人脸识别和人眼检测。通过加载预训练的XML特征文件,程序能检测图像中的人脸和眼睛,并在识别到的区域画出矩形框。示例代码包括读取特征文件、灰度化处理、多尺度检测以及图形界面显示。
摘要由CSDN通过智能技术生成

基于Java简单的人脸和人眼识别程序

注意:

D:/1-NCVT/1.2/1.JavaProgramming/OpenCV/opencv/*前面这部分地址是看你存放的位置决定的*/sources/data/haarcascades/haarcascade_frontalface_alt.xml/*后面的地址不变固定在这个地方*/

package faceDistinguish2;

import java.util.List;

import org.opencv.core.Core;

import org.opencv.core.CvType;

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.highgui.HighGui;

import org.opencv.imgproc.Imgproc;

import org.opencv.objdetect.CascadeClassifier;

import org.opencv.videoio.VideoCapture;

/**

* 基于openc的人脸识别

* @author Ocean

*

*/

public class FaceID {

/**

* OpenCV人脸识别

* @param rgb

* @param gray

*/

public static void faceRecognition(Mat rgb, Mat gray) {

// 读取OpenCV的人脸特征识别文件

CascadeClassifier cascade = new CascadeClassifier("D:/1-NCVT/1.2/1.JavaProgramming/OpenCV/opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml");

//在路径上没有找到相关文件返回1

if (cascade.empty()) {

System.out.println("人脸识别文件读取失败");

//return;

}

MatOfRect rect = new MatOfRect();

//检测人脸

cascade.detectMultiScale(gray, rect);

// 为每张识别到的人脸画一个圈

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

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

}

//图形界面显示

HighGui.imshow("人脸识别", rgb);

}

/**

* OpenCV人眼识别

* @param rgb

* @param gray

*/

public static void eyeRecognition(Mat rgb, Mat gray) {

// 读取OpenCV的人眼特征识别文件

CascadeClassifier cascade = new CascadeClassifier("D:/1-NCVT/1.2/1.JavaProgramming/OpenCV/opencv/sources/data/haarcascades/haarcascade_eye_tree_eyeglasses.xml");

if (cascade.empty()) {

System.out.println("人眼识别文件读取失败");

return;

}

MatOfRect rect = new MatOfRect();

cascade.detectMultiScale(gray, rect);

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

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

}

// HighGui.imshow("人脸识别", rgb);

}

public static void main(String[] args) {

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

// 实例化相机

VideoCapture videoCapture = new VideoCapture();

// 如果要从摄像头获取视频 则要在 VideoCapture 的构造方法写 0

if (!videoCapture.open(0)) {

System.out.println("相机打开失败");

return;

}

while (true) {

Mat img = new Mat();

if (!videoCapture.read(img)) {

return;

}

Mat rgb = new Mat();

// 灰度化

Imgproc.cvtColor(img, rgb, Imgproc.COLOR_BGR2RGB);

Mat gray = new Mat();

Imgproc.cvtColor(rgb, gray, Imgproc.COLOR_RGB2GRAY);

faceRecognition(img, gray);

eyeRecognition(img, gray);

HighGui.waitKey(10);

}

}

}

程序效果

7970a2837e9c45e010c1a4dafe7c639e.png

如果在运行完成关闭图形窗口后再次运行出现下面这种错误是因为程序还没有结束

e39046a62a28f4eb0cab0322692863f3.png

解决办法是点击下面这个除去启动

5b78ce20f1a495adfedaed56269c369e.png

再点击终止就解决这个问题了

f09c8f5a1aa253e02c4b76162cce195e.png

以后关闭图形界面后就点击终止按钮或者直接点击终止按钮就可以终止程序了

4d27a9247b2cc385aa2a110c4e0bd87b.png

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值