相关疑难解决方法(0)

将相机预览旋转到Portrait Android OpenCV相机

我正在尝试使用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

这样更好,但我显然希望这是全屏.

android opencv android-camera

36
推荐指数
6
解决办法
3万
查看次数

将图像旋转90度,180度或270度

我需要将图像旋转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度旋转?

opencv rotation

27
推荐指数
4
解决办法
6万
查看次数

标签 统计

opencv ×2

android ×1

android-camera ×1

rotation ×1