android 人脸画框,Android 裁剪人脸类的实例代码

人脸裁剪类

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 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();

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 裁剪人脸的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值