如何执行文档自动裁剪使用相机识别图像?

Roa*_*ies 25 ocr android opencv crop

我想制作一个类似凸轮扫描仪的应用程序来裁剪文档.

但我需要像我的两个图像一样的功能..

第一张图像显示相机拍摄的图像..

在此输入图像描述

第二个图像像这样识别捕获的图像部分.

在此输入图像描述

我研究得越来越多,但没有得到任何外出,所以,我在这里问,是否有任何人这样做告诉我..

谢谢

Har*_*dik 17

这是您想要实现的完全相同的演示

https://github.com/Aniruddha-Tapas/Document-Scanner(具有自动检测功能)

https://github.com/jhansireddy/AndroidScannerDemo


Gre*_*rey 14

我假设您的问题是检测要扫描的对象.

模式匹配或特征检测等对象检测机制不会为您提供所需的结果,因为您不知道要扫描的对象到底是什么.

基本上你在图片中搜索一个矩形对象.

对此的基本方法可以如下:

  • 在图像上运行canny边缘检测器.在执行此操作之前,它可能有助于模糊图像.物体的边缘应清晰可见.

  • 现在你想做一个Hough变换来找到图片中的线条.

  • 搜索角度约为90度的线条.问题是要找到合适的人选.也许使用最接近图片框架的线条就足够了.

  • 找到相交点以定义对象的边缘.

至少这应该给你一个暗示进一步研究的地方.

作为此类应用程序的进一步步骤,您必须计算点的投影并对对象进行仿射变换.

我希望这有帮助.

写完所有这些后我发现了这篇文章.它应该对你有所帮助.

由于我的答案针对OpenCV,您必须使用OpenCV库.为此,您需要安装Android Native Development Kit(NDK).在OpenCV for Android页面上有一些关于如何在Android上使用OpenCV的好教程.

要记住的一件事是Java包装器的几乎每个函数都调用本机方法.这花费了很多时间.因此,在将结果返回到Java部分之前,您希望在本机代码中尽可能多地执行此操作.


小智 5

我知道我来不及回答,但它可能对某人有所帮助.

请尝试以下代码.

@Override
protected void onDraw(Canvas canvas) {

  super.onDraw(canvas);
  path = new Path();

  path.moveTo(x1, y1);        // this should set the start point right

  //path.lineTo(x1, y1);    <-- this line should be drawn at the end of     course,sorry
  path.lineTo(x2, y2);
  path.lineTo(x3, y3);
  path.lineTo(x4, y4);
  path.lineTo(x1, y1); 
  canvas.drawPath(path, currentPaint);

}
Run Code Online (Sandbox Code Playgroud)