嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元微信扫码支付:2 元
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
android集成opencv进行人脸检测
//检测人脸
private Bitmap faceDetect(Bitmap photo) {
Mat srcMat = new Mat();//原始图像
Mat grayMat = new Mat();//转为灰度图像
Mat tarMat = new Mat();//识别后的图像
Utils.bitmapToMat(photo, srcMat);//转成Mat
srcMat.copyTo(tarMat);
Imgproc.cvtColor(srcMat, grayMat, Imgproc.COLOR_BGRA2GRAY);//转成灰度图
MatOfRect faces = new MatOfRect();//检测后存放的人脸矩形坐标
//调用检测
//detectMultiScale(灰度图,人脸矩形坐标,尺度变化比率1.05-1.2,表示每一个目标至少要被检测到3次才算是真的目标,flag默认设置0,最小尺寸,最大尺寸)
cascadeClassifier.detectMultiScale(grayMat, faces, 1.05, 3, 0, new Size(30, 30), new Size());
//测试鱼
// cascadeClassifier.detectMultiScale(grayMat, faces, 1.1, 3, 0, new Size(96, 96), new Size());
//处理人脸数据
List<Rect> faceList = faces.toList();
System.out.println("人脸数:" faceList.size());
Toast.makeText(getApplicationContext(), "人脸数:" faceList.size(), Toast.LENGTH_LONG).show();
if (faceList.size() > 0) {
for (Rect rect : faceList) {
//人脸画矩形
//rect.tl()左上角坐标,rect.br()右下角坐标
Imgproc.rectangle(tarMat, rect.tl(), rect.br(), new Scalar(0, 255, 0, 255), 6);
}
}
Bitmap showBitmap = Bitmap.createBitmap(photo.getWidth(), photo.getHeight(), Bitmap.Config.ARGB_8888);
//Mat转bitmap
Utils.matToBitmap(tarMat, showBitmap);
//释放内存
grayMat.release();
tarMat.release();
srcMat.release();
return showBitmap;
}