gpt4 book ai didi

android - 使用 opencv 使用 android 肖像模式时的问题

转载 作者:行者123 更新时间:2023-12-02 17:49:16 24 4
gpt4 key购买 nike

我知道这是最重复的问题之一,但是,在付出了这么多努力之后,在任何地方都没有找到可行的解决方案。

尽管对于专家来说这可能是一个简单的问题,但这确实是一个致命的问题。

我正在处理 opencv 哈尔级联 分类器。(例如:人脸检测、眼睛检测)

我刚拍了人脸检测样本来自 的代码“OpenCV-2.4.9-android-sdk” - 示例。

此示例代码设置在 景观 模式,一切正常很好 .

但是,我想让分类器在 中工作肖像 模式。我知道哈尔分类器 不适用于纵向模式 .

由于 opencv 使用“CameraBridgeViewBase ”,所以我使用了 没有所有控件玩相机的分辨率并显示
图像回到屏幕上。(预览)

现在,当我将屏幕方向设置为“ android:screenOrientation="portrait" 时,图像将旋转 90 度时钟 明智的。

我尝试了什么:

预览不旋转的纵向图像 :我在“CameraBridgeViewBase”中修改了“ DeliverAndDrawFrame ”,添加了

            Matrix matrix = new Matrix();
matrix.preTranslate((canvas.getWidth() - mCacheBitmap.getWidth()) / 2,(canvas.getHeight() - mCacheBitmap.getHeight()) / 2);

if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
matrix.postRotate(90f,(canvas.getWidth()) / 2,(canvas.getHeight()) / 2);
canvas.drawBitmap(mCacheBitmap, matrix, null);

使分类器在纵向模式下工作:
我玩过 的各种排列组合转置 翻转在“onCameraFrame”中旋转我传递给detectmultiscale的灰度图像。

我的问题是什么?
  • 我无法获得比“onCameraFrame”更高的原始分辨率的图像。
    如何使图像的原始或实际或原始质量达到相机传感器的容量?
  • 由于我已经付出了很多努力来使分类器在没有任何运气的情况下使用纵向模式,因此任何有效的建议/示例代码/引用都会对我有很大帮助。
  • 最佳答案

    我找到了一个解决方案:

      Matrix matrix = new Matrix();
    matrix.preTranslate((canvas.getWidth() - mCacheBitmap.getWidth()) / 2,(canvas.getHeight() - mCacheBitmap.getHeight()) / 2);
    matrix.postRotate(90f,(canvas.getWidth()) / 2,(canvas.getHeight()) / 2);
    float scale = (float) canvas.getWidth() / (float) mCacheBitmap.getHeight();
    matrix.postScale(scale, scale, canvas.getWidth()/2 , canvas.getHeight()/2 );
    canvas.drawBitmap(mCacheBitmap, matrix, new Paint());

    这提供了具有正确比例的肖像模式:D 请尝试一下。我正在使用 OpenCV 3.4 。

    关于android - 使用 opencv 使用 android 肖像模式时的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26852711/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com