public static void face(CascadeClassifier cascade) {
try (VideoCapture capture = new VideoCapture(0)) {
opencv_highgui.namedWindow("face", opencv_highgui.WINDOW_NORMAL);
while(flag) {
Mat img = new Mat();
if(!capture.read(img)) {
img.release();
break;
}
opencv_imgproc.resize(img, img, new Size(Math.round(img.arrayWidth()/3f),Math.round(img.arrayHeight()/3f)));
Mat grayImg = new Mat();
opencv_imgproc.cvtColor(img, grayImg, opencv_imgproc.COLOR_BGRA2GRAY);
opencv_imgproc.equalizeHist(grayImg, grayImg);
RectVector faces = new RectVector();
cascade.detectMultiScale(grayImg, faces);
for (int i = 0; i < faces.size(); i++) {
Rect face_i = faces.get(i);
if(face_i.width() >= 70 && face_i.width() <= 100) {
//绘制人脸矩形区域,scalar色彩顺序:BGR(蓝绿红)
opencv_imgproc.rectangle(img, face_i, new Scalar(0, 255, 0, 1));
opencv_highgui.imshow("face", img);
Mat ROI = new Mat(img, face_i);
//recogFace(人脸识别函数):该函数还未实现
recogFace(ROI);
}
else
{
opencv_highgui.imshow("face", img);
}
}
opencv_highgui.waitKey(10);
img.release();
grayImg.release();
}
}
}
调用以上函数的代码如下:
//lbpcascade_frontalface.xml 该文件请自行在互联网上baidu
CascadeClassifier cascade = new CascadeClassifier("myRes\\lbpcascade_frontalface.xml");
face(cascade);