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

使用opencv使用android肖像模式时的问题,android,opencv,android-camera,face-detection,Android,Opencv,Android Camera,Face Detection,我知道这是重复最多的问题之一,然而,在付出了这么多努力之后,没有找到任何有效的解决方案 这确实是一个致命的问题,尽管对专家来说可能是一个简单的问题 我正在研究opencv Haar Cascade分类器(例如:人脸检测、眼睛对检测) 我刚刚从“OpenCV-2.4.9-android-sdk”样本中获取了人脸检测样本代码。 此示例代码在横向模式下设置,一切正常 但是,我想让分类器在纵向模式下工作。我知道haar分类器不是为使用肖像模式而设计的 由于opencv使用“CameraBridgeVie

我知道这是重复最多的问题之一,然而,在付出了这么多努力之后,没有找到任何有效的解决方案

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

我正在研究opencv Haar Cascade分类器(例如:人脸检测、眼睛对检测)

我刚刚从“OpenCV-2.4.9-android-sdk”样本中获取了人脸检测样本代码。

此示例代码在横向模式下设置,一切正常

但是,我想让分类器在纵向模式下工作。我知道haar分类器不是为使用肖像模式而设计的

由于opencv使用“CameraBridgeViewBase”,因此我无法使用所有控件来播放相机分辨率和显示图像 图像返回屏幕。(预览)

现在,当我将屏幕方向设置为“android:screenOrientation=“grait””时,图像将按时钟旋转90度

我试过什么:

要在不旋转的情况下预览纵向图像:我通过添加

            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。

    有人能帮我一把吗?开发人员不愿意帮助我们,关于如何解决这个问题,有很多相互矛盾的想法。