首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用图形覆盖捕捉图像

用图形覆盖捕捉图像
EN

Stack Overflow用户
提问于 2016-06-14 10:21:20
回答 1查看 1.9K关注 0票数 0

我使用了一个api脸跟踪器示例,我对代码做了一些修改,看看它是否会按照我对app的想法工作。我想做的是在检测到面部后添加口罩。

到目前为止,我已经添加了一个可绘制的面具样本,当我检测到一张脸而不是画一个脸点时,我会在人脸跟踪矩形中绘制。现在,它显示在预览的面罩在脸上,但当我试图捕捉该图像,它只捕捉帧从相机,而不是与图形覆盖,我增加了面具。有什么办法可以用那个面具从摄像机里捕捉到吗?

图像保存

正在移动屏幕上显示的图像

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-27 15:32:44

在我过去做过的一个项目中,我已经取得了类似的成果,但是我已经不能再访问这个项目了。

当您调用捕获方法时,需要存储对面部位置的引用。

我不知道视觉api在摄像机上给了你多少控制,所以你可以:

拍摄图片,在保存文件之前,在返回的位图上添加掩码资源。

加载保存的文件,在文件的顶部添加掩码资源。

我将在稍后查看一些代码,如果它有帮助的话。

编辑旋转位图

代码语言:javascript
复制
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);

//

代码语言:javascript
复制
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;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37809279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档