0

我正在使用谷歌人脸检测方法,我完成了所有的面部标志。现在我必须为检测到的面部添加一些过滤器,如香烟、眼镜、脸颊上的腮红等。但我无法做到这一点。我试图在嘴唇上添加香烟的位图,但我无法理解绘制它必须通过的点。请通过提供一些代码来帮助我在android中添加过滤器。

    private void drawCigarette(Canvas canvas, PointF leftMouth, PointF rightMouth) {
        float widthScaleFactor = canvas.getWidth() / previewWidth;

        if (leftMouth != null && rightMouth != null) {
            int mouthLength = (int)((leftMouth.x - rightMouth.x) * widthScaleFactor);

            Rect cigaretteRect = new Rect(
                    Math.round(translateX(leftMouth.x)) - mouthLength,
                    Math.round(translateY(leftMouth.y)),
                    Math.round(translateX(leftMouth.x)),
                    Math.round(translateY(leftMouth.y)) + mouthLength
            );

            canvas.drawBitmap(Data.setAndGetData.getIcon(), null, cigaretteRect, null);
        }
    } 

其中 translateX 和 translateY 是:


        public float scaleX(float horizontal) {
            return horizontal * mOverlay.mWidthScaleFactor;
        }


        public float scaleY(float vertical) {
            return vertical * mOverlay.mHeightScaleFactor;
        }


        public float translateX(float x) {
            if (mOverlay.mFacing == CameraSource.CAMERA_FACING_FRONT) {
                return mOverlay.getWidth() - scaleX(x);
            } else {
                return scaleX(x);
            }
        }


        public float translateY(float y) {
            return scaleY(y);
        }

这个功能是在相反的方向画烟,它取的起点正确,但终点不正确,它取的终点高于起点。

我正在尝试构建一个类似 snapchat 的应用程序。

4

0 回答 0