温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在Android中实现一个裁剪人脸类

发布时间:2021-06-08 16:48:17 来源:亿速云 阅读:227 作者:Leah 栏目:移动开发

怎么在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<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中实现一个裁剪人脸类的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI