亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Android中實現一個裁剪人臉類

發布時間:2021-06-08 16:48:17 來源:億速云 閱讀:196 作者: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

桃源县| 永吉县| 甘肃省| 阳西县| 弥渡县| 揭阳市| 东平县| 绩溪县| 桦甸市| 新源县| 武冈市| 花莲市| 湖口县| 晋宁县| 朝阳县| 清丰县| 墨竹工卡县| 阿克| 兰溪市| 马关县| 金山区| 江油市| 唐海县| 博爱县| 上高县| 永兴县| 武胜县| 阆中市| 邛崃市| 茌平县| 平湖市| 阿拉善左旗| 锡林郭勒盟| 泰宁县| 沧州市| 嘉峪关市| 申扎县| 正阳县| 曲麻莱县| 峨眉山市| 菏泽市|