java调用opencv库自带的人脸识别模型进行人脸识别,并将识别到的人脸图片保存到本地。代码如下:
package com.opencv;
import org.opencv.core.*;
import org.opencv.core.Point;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;
import org.opencv.videoio.VideoCapture;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
static {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
System.load("D:\\opencv\\opencv\\build\\x64\\vc15\\bin\\opencv_world453.dll");
System.load("D:\\opencv\\opencv\\build\\bin\\opencv_videoio_ffmpeg453_64.dll");
}
public static void main(String[] args) {
new Main().test();
}
public static void test(){
VideoCapture vc = new VideoCapture();
CascadeClassifier cascadeClassifier=new CascadeClassifier();
cascadeClassifier.load("D:\\opencv\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt2.xml");
boolean isOpen = vc.open(0);
System.out.println("isOpen="+isOpen);
Mat mat = new Mat();
Mat gray = new Mat();
MatOfRect faces= new MatOfRect();
String winName = "showFrame";
HighGui.namedWindow(winName);
while (vc.read(mat)){
try {
System.out.println("read.........");
String curTime = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss_SSS").format(new Date());
Imgproc.cvtColor(mat,gray,Imgproc.COLOR_RGB2GRAY);
cascadeClassifier.detectMultiScale(gray,faces,1.2,6,0);
for (Rect rect : faces.toArray()) {
Imgproc.rectangle(mat, new Point(rect.x, rect.y), new Point(rect.x + rect.width,
rect.y + rect.height),
new Scalar(0, 255, 0));
}
if (faces.toArray().length>0){
Imgcodecs.imwrite("E:\\test\\"+curTime+".jpg",mat);
}
HighGui.imshow(winName,mat);
int key = HighGui.waitKey(1);
} catch (Exception e) {
e.printStackTrace();
}
}
HighGui.destroyAllWindows();
vc.release();
}
}