java人臉識別(opencv3)
package opencv;
import java.io.File;
import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;
public class Hellopencv {
public static void main(String[] args) {
/*
String imageFileName="E:/111.jpg";
File f = new File(imageFileName);
//原圖片不存在直接退出
if(!f.exists()){
System.out.println("\n Image File Not Found!");
}
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat image= Imgcodecs.imread(imageFileName);
// System.out.println("mat = " + image.dump());
image.release();*/
detectFace("E:\\111.jpg");
}
public static boolean detectFace(String imageFileName) {
File f = new File(imageFileName);
//原圖片不存在直接退出
if(!f.exists()){
System.out.println("\n Image File Not Found!");
return false;
}
//載入本地庫dll檔案
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
//載入分類器
CascadeClassifier faceDetector =
new CascadeClassifier();
faceDetector.load("E:\\resources\\lbpcascades\\lbpcascade_frontalface.xml");
//讀取影象
Mat image= Imgcodecs.imread(imageFileName);
System.out.println("讀取成功");
//檢測人臉
Size min=new Size(100, 100);
MatOfRect faceDetections=new MatOfRect();
faceDetector.detectMultiScale(image,faceDetections,1.1,3,0,min);
//檢測結果
Rect[] rects=faceDetections.toArray();
if(rects==null||rects.length==0){
System.out.println(rects.length);
return false;
}
int i=0;
for(Rect rect:rects){
Point x = new Point(rect.x, rect.y);
Point y = new Point(rect.x + rect.width, rect.y + rect.height);
//在image圖片上畫框,x,y可確定框的位置和大小,new Scalar(0, 255, 0)是框的顏色,自行調整
Imgproc.rectangle(image, x,y, new Scalar(0, 255, 0));
//儲存監測的人臉小圖片
Rect r = new Rect(x, y);
System.out.println(r.height+":"+r.width);
Mat areaM = new Mat(image, r);
//儲存監測的人臉小圖片到tmp+序號的jpg檔案
String tmpFilePath = "e:\\opencv"+i+".jpg";
Imgcodecs.imwrite(tmpFilePath, areaM);
i++;
}
// //在識別出來的人臉周圍話一個方框
// Rect rect=rects[0];
image.release();
return true;
}
}
這是opencv3對應的程式碼,如果是opencv2xx的話,可能在讀入和輸出圖片的時候方法有所不同