如何填充android中封闭区域的颜色

时间:2017-02-10 08:35:52

标签: image-processing android-canvas spline opencv4android android-paint

 public void connectLipLine(int start, int end, Bitmap bitmap, Canvas canvas) {
    Paint mPaint = new Paint();
    mPaint.setColor(Color.GREEN);
    mPaint.setStyle(Paint.Style.STROKE);
    mPaint.setAntiAlias(true);
    mPaint.setDither(true);
    mPaint.setStrokeWidth(1f);

    Path path = new Path();

    // Left lower lips
            path.reset();
    path.moveTo(landmark_pt_x.get(37), landmark_pt_y.get(37));
    Log.d(TAG + " connectLipLine", landmark_pt_label.get(39) + " end: " + landmark_pt_label.get(41));
    path.cubicTo(landmark_pt_x.get(40), landmark_pt_y.get(40),
            landmark_pt_x.get(41), landmark_pt_y.get(41),
            // bottom lip point
            landmark_pt_x.get(38), landmark_pt_y.get(38));

    Log.d(TAG, landmark_pt_x.get(40) + " " + landmark_pt_y.get(40) + " : " + landmark_pt_x.get(41) + " " + landmark_pt_y.get(41));
    canvas.drawPath(path, mPaint);

    path.reset();
    // bottom right lip point
    path.moveTo(landmark_pt_x.get(46), landmark_pt_y.get(46));
    Log.d(TAG + " connectLipLine", landmark_pt_label.get(39) + " end: " + landmark_pt_label.get(41));
    // Left lower lips
    path.cubicTo(landmark_pt_x.get(43), landmark_pt_y.get(43),
            landmark_pt_x.get(44), landmark_pt_y.get(44),
            // bottom lip point
            landmark_pt_x.get(38), landmark_pt_y.get(38));
    canvas.drawPath(path, mPaint);

    path.reset();
    // top left lip point
    path.moveTo(landmark_pt_x.get(37), landmark_pt_y.get(37));
    Log.d(TAG + " connectLipLine", landmark_pt_label.get(39) + " end: " + landmark_pt_label.get(41));

    path.cubicTo(landmark_pt_x.get(49), landmark_pt_y.get(49),
            landmark_pt_x.get(48), landmark_pt_y.get(48),
    //top middle point
            landmark_pt_x.get(54), landmark_pt_y.get(54));

    canvas.drawPath(path, mPaint);

    path.reset();
     //top right lip point
    path.moveTo(landmark_pt_x.get(46), landmark_pt_y.get(46));
    Log.d(TAG + " connectLipLine", landmark_pt_label.get(39) + " end: " + landmark_pt_label.get(41));

    path.cubicTo(landmark_pt_x.get(52), landmark_pt_y.get(52),
            landmark_pt_x.get(51), landmark_pt_y.get(51),
            landmark_pt_x.get(54), landmark_pt_y.get(54));

    canvas.drawPath(path, mPaint);

    //inside lower
    //start from left
    path.reset();
    path.moveTo(landmark_pt_x.get(37), landmark_pt_y.get(37));
    path.quadTo(
            landmark_pt_x.get(39), landmark_pt_y.get(39),
            landmark_pt_x.get(45), landmark_pt_y.get(45));

    canvas.drawPath(path, mPaint);

    //inside lower
    //start from right
    path.reset();
    path.moveTo(landmark_pt_x.get(46), landmark_pt_y.get(46));
    path.quadTo(
            landmark_pt_x.get(42), landmark_pt_y.get(42),
            landmark_pt_x.get(45), landmark_pt_y.get(45));

    canvas.drawPath(path, mPaint);

    //inside upper
    //start from left
    path.reset();
    path.moveTo(landmark_pt_x.get(37), landmark_pt_y.get(37));
    path.quadTo(
            landmark_pt_x.get(50), landmark_pt_y.get(50),
            landmark_pt_x.get(47), landmark_pt_y.get(47));

    canvas.drawPath(path, mPaint);

    //inside upper
    //start from right
    path.reset();
    path.moveTo(landmark_pt_x.get(46), landmark_pt_y.get(46));
    path.quadTo(
            landmark_pt_x.get(53), landmark_pt_y.get(53),
            landmark_pt_x.get(47), landmark_pt_y.get(47));

    canvas.drawPath(path, mPaint);

}

结果: enter image description here

我已经使用face ++ api来检测地标特征并使用该点来封闭一个区域,但我希望填充上下嘴唇的封闭区域。我怎么能在android中做到这一点?以上是我附上该区域的代码。请给我一些帮助填补上下嘴唇。

另外,还有一个问题。我可以使用HSV颜色空间来设置颜色而不是使用RGB,我可以只更改每个像素的H值,以便它不会改变图像的亮度吗?非常感谢你。

0 个答案:

没有答案