我使用了一个api脸跟踪器示例,我对代码做了一些修改,看看它是否会按照我对app的想法工作。我想做的是在检测到面部后添加口罩。
到目前为止,我已经添加了一个可绘制的面具样本,当我检测到一张脸而不是画一个脸点时,我会在人脸跟踪矩形中绘制。现在,它显示在预览的面罩在脸上,但当我试图捕捉该图像,它只捕捉帧从相机,而不是与图形覆盖,我增加了面具。有什么办法可以用那个面具从摄像机里捕捉到吗?
图像保存
正在移动屏幕上显示的图像
发布于 2016-06-27 15:32:44
在我过去做过的一个项目中,我已经取得了类似的成果,但是我已经不能再访问这个项目了。
当您调用捕获方法时,需要存储对面部位置的引用。
我不知道视觉api在摄像机上给了你多少控制,所以你可以:
拍摄图片,在保存文件之前,在返回的位图上添加掩码资源。
或
加载保存的文件,在文件的顶部添加掩码资源。
我将在稍后查看一些代码,如果它有帮助的话。
编辑旋转位图
bitmap = android.provider.MediaStore.Images.Media
.getBitmap(cr, selectedImage);
ExifInterface exif = new ExifInterface("/storage/emulated/0/Pic.jpg");
String exifOrientation = exif.getAttribute(ExifInterface.TAG_ORIENTATION);
int i = Integer.parseInt(exifOrientation);
bitmap = rotateImage(bitmap, i);//
private Bitmap rotateImage(Bitmap bm, int i) {
Matrix matrix = new Matrix();
switch (i) {
case ExifInterface.ORIENTATION_NORMAL:
return bm;
case ExifInterface.ORIENTATION_FLIP_HORIZONTAL:
matrix.setScale(-1, 1);
break;
case ExifInterface.ORIENTATION_ROTATE_180:
matrix.setRotate(180);
break;
case ExifInterface.ORIENTATION_FLIP_VERTICAL:
matrix.setRotate(180);
matrix.postScale(-1, 1);
break;
case ExifInterface.ORIENTATION_TRANSPOSE:
matrix.setRotate(90);
matrix.postScale(-1, 1);
break;
case ExifInterface.ORIENTATION_ROTATE_90:
matrix.setRotate(90);
break;
case ExifInterface.ORIENTATION_TRANSVERSE:
matrix.setRotate(-90);
matrix.postScale(-1, 1);
break;
case ExifInterface.ORIENTATION_ROTATE_270:
matrix.setRotate(-90);
break;
default:
return bm;
}
try {
Bitmap bmRotated = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true);
bm.recycle();
return bmRotated;
} catch (OutOfMemoryError e) {
e.printStackTrace();
return null;
}
}https://stackoverflow.com/questions/37809279
复制相似问题