前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 裁剪人脸类的实例代码

Android 裁剪人脸类的实例代码

作者头像
砸漏
发布2020-11-05 10:11:13
4110
发布2020-11-05 10:11:13
举报
文章被收录于专栏:恩蓝脚本

人脸裁剪类

代码语言:javascript
复制
public final class FaceCj {
private static BitmapFactory.Options BitmapFactoryOptionsbfo;
private static ByteArrayOutputStream out;
private static byte[] data;
private static FaceDetector.Face[] myFace;
private static FaceDetector myFaceDetect;
private static int tx = 0;
private static int ty = 0;
private static int bx = 0;
private static int by = 0;
private static int width = 0;
private static int height = 0;
private static float wuchax = 0;
private static float wuchay = 0;
private static FaceDetector.Face face;
private static PointF myMidPoint;
private static float myEyesDistance;
private static List<String  facePaths;
private static String facePath;
public static Bitmap cutFace(Bitmap bitmap, Context context) {
facePaths = null;
BitmapFactoryOptionsbfo = new BitmapFactory.Options();
BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565; // 构造位图生成的参数,必须为565。类名+enum
out = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 50, out);
data = out.toByteArray();
bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,
BitmapFactoryOptionsbfo);
try {
out.flush();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
width = bitmap.getWidth();
height = bitmap.getHeight();
myFace = new FaceDetector.Face[5]; // 分配人脸数组空间
myFaceDetect = new FaceDetector(bitmap.getWidth(), bitmap.getHeight(), 5);
int numberOfFaceDetected = myFaceDetect.findFaces(bitmap, myFace);
if (numberOfFaceDetected <= 0) {// FaceDetector构造实例并解析人脸
bitmap.recycle();
return null;
}
facePaths = new ArrayList<String ();
for (int i = 0; i < numberOfFaceDetected; i++) {
face = myFace[i];
myMidPoint = new PointF();
face.getMidPoint(myMidPoint);
myEyesDistance = face.eyesDistance();  //得到人脸中心点和眼间距离参数,并对每个人脸进行画框
wuchax = myEyesDistance / 2 + myEyesDistance;
wuchay = myEyesDistance * 2 / 3 + myEyesDistance;
if (myMidPoint.x - wuchax < 0) {//判断左边是否出界
tx = 0;
} else {
tx = (int) (myMidPoint.x - wuchax);
}
if (myMidPoint.x + wuchax   width) {//判断右边是否出界
bx = width;
} else {
bx = (int) (myMidPoint.x + wuchax);
}
if (myMidPoint.y - wuchay < 0) {//判断上边是否出界
ty = 0;
} else {
ty = (int) (myMidPoint.y - wuchay);
}
if (myMidPoint.y + wuchay   height) {//判断下边是否出界
by = height;
} else {
by = (int) (myMidPoint.y + wuchay);
}
try {
return Bitmap.createBitmap(bitmap, tx, ty, bx - tx, by - ty);//这里可以自行调整裁剪宽高
} catch (Exception e) {
e.printStackTrace();
}
}
bitmap.recycle();
return bitmap;
}
}

总结

以上所述是小编给大家介绍的Android 裁剪人脸的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对ZaLou.Cn网站的支持!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档