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实现人脸检测并拍照
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。