使用OpenCv进行文档检测,导致安卓系统性能下降



我是android版OpenCv的新手。我正在尝试制作一个使用OpenCv-2.4.13自动检测文档的应用程序。在我的应用程序中,有一个检测文档的功能(类似于Scanbot应用程序),然后将其转换为文档。到目前为止,我能够在横向模式下使用opencv检测文档。我需要的是在人像模式下显示应用程序。由于默认情况下,android的OpenCv工作在横向模式下,我希望它处于纵向模式。我已经为此研究了很多解决方案,它也起到了作用,但存在性能下降问题(如相机帧减慢)。到目前为止,我所经历的是:将相机预览旋转到Portrait Android OpenCV相机

将安卓相机旋转到人像

然而,我可以在人像中更改相机方向,但存在一些性能下降问题

有人成功做到这一点吗

除了OpenCv之外,我还在寻找其他自动检测文档的选项。我不知道没有OpenCv是否有可能

是否可以在没有OpenCv的情况下自动检测文档?如何

我在opencv中遇到了同样的问题,经过数小时的研究,我终于找到了解决方案。您必须对默认的opencv类进行更改
请执行以下步骤:1) 在CameraBridgeViewBase类中添加以下代码

Matrix matrix = new Matrix();
matrix.setRotate(90f);
Bitmap bitmap = Bitmap.createBitmap(mCacheBitmap, 0, 0, mCacheBitmap.getWidth(), mCacheBitmap.getHeight(), matrix, true);

2) 现在在drawpitmap方法中,将上面的位图替换为mCacheBitmap,就像下面的一样

if (mScale != 0) {
canvas.drawBitmap(bitmap, new Rect(0,0,bitmap.getWidth(), bitmap.getHeight()),
new Rect((int)((canvas.getWidth() - mScale*bitmap.getWidth()) / 2),
(int)((canvas.getHeight() - mScale*bitmap.getHeight()) / 2),
(int)((canvas.getWidth() - mScale*bitmap.getWidth()) / 2 + mScale*bitmap.getWidth()),
(int)((canvas.getHeight() - mScale*bitmap.getHeight()) / 2 + mScale*bitmap.getHeight())), null);
} else {
canvas.drawBitmap(bitmap, new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()),
new Rect((canvas.getWidth() - bitmap.getWidth()) / 2,
(canvas.getHeight() - bitmap.getHeight()) / 2,
(canvas.getWidth() - bitmap.getWidth()) / 2 + bitmap.getWidth(),
(canvas.getHeight() - bitmap.getHeight()) / 2 + bitmap.getHeight()), null);
}

3) 现在,在JavaCameraView类中,替换initializeCamer方法中的以下代码(更改纵向模式的高度和宽度)

if ((getLayoutParams().width == ActionBar.LayoutParams.MATCH_PARENT) && (getLayoutParams().height == ActionBar.LayoutParams.MATCH_PARENT))
mScale = Math.min(((float)height)/mFrameWidth, ((float)width)/mFrameHeight); 
else
mScale = 0;

你完了!!

我不认为,除了OpenCv之外,还有其他选择可以自动检测对象

最新更新