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