android人脸检测并裁剪人脸,Android 裁剪人脸

public final classFaceCj {private staticBitmapFactory.Options BitmapFactoryOptionsbfo;private staticByteArrayOutputStream out;private static byte[] data;private staticFaceDetector.Face[] myFace;private staticFaceDetector 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 staticFaceDetector.Face face;private staticPointF myMidPoint;private static floatmyEyesDistance;private static ListfacePaths;private staticString facePath;public staticBitmap cutFace(Bitmap bitmap, Context context) {

facePaths= null;

BitmapFactoryOptionsbfo= newBitmapFactory.Options();

BitmapFactoryOptionsbfo.inPreferredConfig= Bitmap.Config.RGB_565; //构造位图生成的参数,必须为565。类名+enum

out = newByteArrayOutputStream();

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

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

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值