我正在尝试使用OpenCV 2.4.3.2创建一个相机应用程序并进行一些opencv处理.我希望它能够有多个UI方向,而不仅仅是Landscape.
问题是,当我将方向更改为纵向时,图像会侧向出现.
我知道我可以在进行图像处理之前旋转输入图像(因此只将方向保留为横向),这很好并且有效,但是没有解决我的其他UI将处于错误方向的问题.
我也尝试使用这段代码来旋转相机90deg,但它似乎没有用.
mCamera.setDisplayOrientation(90);
Run Code Online (Sandbox Code Playgroud)
它要么没有效果,要么有时只会导致预览变黑
有人用OpenCV成功完成了这项工作吗?我的类扩展自JavaCameraView.

我做了一些改进,就是我在OpenCV中旋转了图像,因为它在CameraBridgeViewBase.java类中显示.
在交付和绘制框架方法中:
if (canvas != null) {
canvas.drawColor(0, android.graphics.PorterDuff.Mode.CLEAR);
//canvas.drawBitmap(mCacheBitmap, (canvas.getWidth() - mCacheBitmap.getWidth()) / 2, (canvas.getHeight() - mCacheBitmap.getHeight()) / 2, null);
//Change to support portrait view
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, new Paint());
Run Code Online (Sandbox Code Playgroud)
...基本上,这只是像输入图像一样

这样更好,但我显然希望这是全屏.
我需要将图像旋转90度,180度或270度.在OpenCV4Android中我可以使用:
Imgproc.getRotationMatrix2D(new Point(center, center), degrees, 1);
Imgproc.warpAffine(src, dst, rotationMatrix, dst.size());
Run Code Online (Sandbox Code Playgroud)
但是,这是我的图像处理算法的一个巨大瓶颈.当然,通过90度的倍数的简单旋转比最一般的情况简单得多warpAffine,并且可以更有效地完成.例如,对于180度,我可以使用:
Core.flip(src, dst, -1);
Run Code Online (Sandbox Code Playgroud)
其中-1表示翻转水平轴和垂直轴.是否有类似的优化我可以用于90或270度旋转?