Java+OpenCV实现人脸检测并自动拍照
java+opencv实现人脸检测,调用笔记本摄像头实时抓拍,人脸会用红色边框标识出来,并且将抓拍的目录存放在src下,图片名称是时间戳。
环境配置:win764位,jdk1.8
CameraBasic.java
packagecom.njupt.zhb.test;
importjava.awt.EventQueue;
importjavax.swing.ImageIcon;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importorg.opencv.core.*;
importorg.opencv.highgui.Highgui;
importorg.opencv.highgui.VideoCapture;
importorg.opencv.imgproc.Imgproc;
importorg.opencv.objdetect.CascadeClassifier;
/**
*动态人脸检测并裁剪
*@authorhyj
*
*/
publicclassCameraBasic{
static{
System.out.println(System.getProperty("java.library.path"));
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
privateJFrameframe;
privatestaticJLabellabel;
privatestaticintflag=0;
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
@Override
publicvoidrun(){
try{
CameraBasicwindow=newCameraBasic();
window.frame.setVisible(true);
}catch(Exceptione){
e.printStackTrace();
}
}
});
VideoCapturecamera=newVideoCapture();//创建Opencv中的视频捕捉对象
camera.open(0);//open函数中的0代表当前计算机中索引为0的摄像头,如果你的计算机有多个摄像头,那么一次1,2,3……
if(!camera.isOpened()){//isOpened函数用来判断摄像头调用是否成功
System.out.println("CameraError");//如果摄像头调用失败,输出错误信息
}else{
Matframe=newMat();//创建一个输出帧
while(flag==0){
camera.read(frame);//read方法读取摄像头的当前帧
//CascadeClassifierfaceDetector=newCascadeClassifier("src/com/njupt/zhb/test/lbpcascade_frontalface.xml");
CascadeClassifierfaceDetector=newCascadeClassifier("src/com/njupt/zhb/test/haarcascade_frontalface_alt.xml");
MatOfRectfaceDetections=newMatOfRect();
faceDetector.detectMultiScale(frame,faceDetections);
Rect[]rectArray=faceDetections.toArray();
if(rectArray.length>0){
for(inti=0;irectCrop.height+rectCrop.width){
rectCrop=newRect(rect.x,rect.y,rect.width,rect.height);
}
System.out.println(String.format("检测到%s个人脸!",rectArray.length));
MatimageRoi=newMat(frame,rectCrop);
Stringname=System.currentTimeMillis()+".png";
Highgui.imwrite(name,imageRoi);
Core.rectangle(frame,newPoint(rect.x,rect.y),newPoint(rect.x+rect.width,rect.y+rect.height),newScalar(0,0,255),2);
}
}
//转换图像格式并输出
label.setIcon(newImageIcon(mat2BufferedImage.matToBufferedImage(frame)));
try{
Thread.sleep(500);//线程暂停500ms
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
//if(faceCount>0){
//faceSerialCount++;
//System.out.println(faceSerialCount);
//}else{
//faceSerialCount=0;
//}
//
//if(faceSerialCount>6){
//MatimageRoi=newMat(frame,rectCrop);
//Highgui.imwrite("haha.png",imageRoi);
//faceSerialCount=0;
//}
}
}
}
privateCameraBasic(){
initialize();
}
privatevoidinitialize(){
frame=newJFrame();
frame.setBounds(100,100,1000,600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
label=newJLabel("");
label.setBounds(0,0,1000,500);
frame.getContentPane().add(label);
}
}
完整源码下载地址:Java+OpenCV实现人脸检测并拍照
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。