Android OpenCV竖屏人脸识别支持

OpenCV android 默认不支持竖屏 但可以通过一些手段来改变 最直接的就是修改CameraBridgeViewBase

protected void deliverAndDrawFrame(CvCameraViewFrame frame) {

  if (canvas != null) {
                canvas.drawColor(0, android.graphics.PorterDuff.Mode.CLEAR);
                Log.d(TAG, "mStretch value: " + mScale);
                    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());
                    Log.d(TAG, "Matrix value: " + "MatrixMatrixMatrixMatrixMatrixMatrixMatrixMatrix)");
                }
)

这种方法很有效果,但是存在一点不足,人脸识别还是不行,设备横过来才可以识别

下面这种方法简单有效,找到onCameraFrame这个方法

    public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
      
        Mat dst = new Mat();
        Mat rotateMat = Imgproc.getRotationMatrix2D(new Point(mRgba.cols()/2,mRgba.rows()/2), 90, 1);
        Imgproc.warpAffine(mRgba, dst, rotateMat, new Size(480,640));
        mNativeDetector.process(dst);

        return dst;
    }

在测试的时候发现 页面会黑屏 ,一直报错

CameraPreview: Mat type: " 480 + "" +640);
01-22 02:31:32.380 21945-21945 E/CameraPreview: Bitmap type: " 640+ "
" +480 );
这是由于变换后尺寸不对,手动设置好 new Size(480,640)就可以了

猜你喜欢

转载自blog.csdn.net/weixin_34055910/article/details/87471541