脸上没有显示红色矩形框

Not showing a red rectangle box on Face

    paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setColor(Color.RED);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(5);

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inPreferredConfig = Bitmap.Config.RGB_565;
    bitmap = new BitmapFactory().decodeResource(getResources(),R.drawable.danish,options);
    imageHeight = image_1.getHeight();
    imageWidth = image_1.getWidth();

    face = new Face[numberofFaces];
    faceDetector = new FaceDetector(imageWidth,imageHeight,numberofFaces);

    foundfaces = faceDetector.findFaces(bitmap,face);

    if (foundfaces > 0)
    {
        Toast.makeText(this,"Found Face",Toast.LENGTH_LONG).show();
    }
    else
    {
        Toast.makeText(this,"No face found",Toast.LENGTH_LONG).show();
    }
    Canvas canvas = new Canvas();

    drawCanvas(canvas);

}

private void drawCanvas(Canvas canvas) {


    canvas.drawBitmap(bitmap,0,0,null);

    for(int i=0;i<foundfaces;i++)
    {
        Face faces = face[i];
        PointF midPoint = new PointF();
        faces.getMidPoint(midPoint);
        eyedistance = faces.eyesDistance();
        canvas.drawRect((int)midPoint.x - eyedistance,(int) midPoint.y - eyedistance, (int)midPoint.x + eyedistance,(int)midPoint.y + eyedistance,paint);
    }

    Toast.makeText(this,"Eye Distance: "+eyedistance,Toast.LENGTH_LONG).show();


}

我正在做一个人脸检测项目,并通过 Android 人脸库检测人脸....这段人脸检测代码为我提供了眼睛距离等类似信息的正输出,但没有显示脸上的矩形框 有人可以帮忙吗?

无需编写自己的 drawCanvas,只需覆盖自定义视图的 onDraw 方法即可。

在这个方法中,检查你是否找到了面孔。如果是这样,遍历它们,并使用作为 onDraw 函数的参数给出的 canvas 在每个面上绘制位图。

要在您的视图上触发 onDraw 方法,只需在找到 Faces

后调用 this.invalidate

您可以使用类似 class 的内容,如下所示。

用法将是:

MyView view = (MyView) findViewById(R.id.myview); //id in your xml
view.setImageResource(R.id.your_image);
view.computeFaces();

这是调用 MyView :

public class MyView extends View {
  private Face[] foundFaces;

  public MyView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
  }

  public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public MyView(Context context) {
    super(context);
  }

  public void computeFaces() {
  //In here, do the Face finding processing, and store the found Faces in the foundFaces variable.
    if (numberOfFaces> 0) {
      this.invalidate();
    }
  }

  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if ((foundFaces != null) && (foundFaces.length > 0)) {
        for (Face f : foundFaces) {
            canvas.drawBitmap(
              //your square bitmap,
              //x position of the face,
              //y position of the face,
              //your define paint);
        }
    }
  }
}