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)就可以了
网友评论