试试一个简单的文档扫描器(机器视觉)

用途:可以用在智能手机上的名片扫描归档或文档扫描保存。

设想:我们通过手机的摄像头拍到一张图片如下

我们的目的是自动获取小票的位置,然后自动整理成正视效果然后整理存起来,需要的效果可能如下

为了全部自动化于是我们有下边一些可能实现问题的想法和步骤:

1.首先读入图片灰度化。

2.为了寻找小票的位置我们可能想从边缘这块出发去寻找小票,为了避免噪音的影响,我们对图片进行高斯模糊然后再进行canny算查找边缘

可以看出,其实边缘检测效果不太好,具体教通用的参数自己可以去调,这里只做一个示例,当然边缘效果越好,效果就越准确。

3.做完边缘检测之后,接下要找到小票的话,需要寻找小票轮廓,利用边缘信息寻找轮廓于是有

可以看出,找到的轮廓多到吓死你,一般像我们这种应用都有个假设,假设我们是用来扫书籍或名片之类的,理论上他们是图片的焦点,相对来说轮廓都是比较大的。

4.得到原始众多轮廓之后我们就要想办法得到我们想要的轮廓了,我们对这些检测出来的轮廓的面积进行排序取头5-6个比较大的轮廓,然后计算这4-6个中每个轮廓近似的多边形,得到各自的顶点,然后判断哪些轮廓的顶点数量为4的就是我们想要的轮廓了,于是有下图;

5.这样子我们就得到小票的4个顶点的位置了,然后我们的目标是正视效果 ,于是新的对应顶点位置 是新图片的四个顶点,这样子通过这四个对应点对,我们就可以算出一个投影变换矩阵,然后对原图进行变换就可能得到我们想要的结果

然后 其实这种方法要做到非常鲁棒性,目前这些方法都无法达到要求的,其实可以产生四个顶点,允许用户交互,对准小票或文档相对于的四个顶点 然后进行第5步的变化相对于如下

好久没写博客了,先这样了、

时间: 2024-12-30 05:52:07

试试一个简单的文档扫描器(机器视觉)的相关文章

一个简单的文档导出公共处理类

package com.common.export; import java.io.OutputStream; import java.lang.reflect.Field; import java.util.List; import jxl.Workbook; import jxl.format.UnderlineStyle; import jxl.write.Label; import jxl.write.WritableCellFormat; import jxl.write.Writab

[.NET] 打造一个很简单的文档转换器 - 使用组件 Spire.Office

打造一个很简单的文档转换器 - 使用组件 Spire.Office 目录 Spire.Office 介绍 库引用 界面预览 代码片段 Spire.Office 介绍 关于 Spire.Office,它是一个专门为开发人员创建,读取,写入设计的库,转换和从打印 word 文档文件.作为一个独立的 .NET组件,它不需要在机器上安装微软的 Word 等办公软件.然而,它可以将微软的“文档创建功能”集成到任何开发人员的网络应用程序中.它是一个可靠的 MS Word 的API,可以执行许多Word文档处

解析简单xml文档

一.解析简单的xml文档 使用xml.etree.ElementTree 下的parse() xmlName.xml的文档的内容如下: <?xml version="1.0"?> <data> <country name="zhongguo"> <rank updated="yes">2</rank> <year >2017</year> <gdppc>

分享一个Linux管理文档多租户的例子

例题 同一群组microsoft下的两个账号justmine001和justmine002需要共同拥有目录/microsoft/eshop的开发权,以便进行协同工作,但是其他人不允许进入和查阅该目录. 从例题可以分析出: 同一群组下的账户需要共同拥有目录的使用权,且可以编辑里面的任何文件. 其他账户不拥有该目录的任何权限. 需要使用root账户,创建账户.群组,设置目录权限,然后搭建开发环境. 创建账户相关信息 groupadd microsoft ; 新增群组 useradd -G micro

Photoshop脚本 &gt; 打开一个存在的文档

源自:http://coolketang.com/tutorials/menu2lesson3.php 本节将演示如何使用脚本,打开一个图片.首先创建一个空白的脚本文档,并保存在硬盘上某个位置. 首先创建一个空白的脚本文档,并保存在硬盘上某个位置. 接着输入脚本代码: //定义一个变量[sampleDoc],用来表示硬盘上的一个图片文档. var sampleDoc = File("E:\Horse.jpg"); //定义一个变量[message],用来表示一个字符串. var mes

【转】刚发现一个linux在线文档库。很好很强大。

原文网址:http://blog.csdn.net/longxibendi/article/details/6048231 1.网址: http://www.mjmwired.net 2.比如查看这个 proc.txt ,就在这里能找到. http://www.mjmwired.net/kernel/Documentation/filesystems/proc.txt 内核参数解释全在这里了.不过,也可以下载内核完源代码,从/usr/src/linux/Documentation/proc.tx

简单的文档转码转换工具包

闲来无事,把原来做过的一个转码服务修改了一些,打包成一个jar包,可以用来将doc.excel等等文档转换成pdf,然后转换成可以在线预览的swf文件.支持图片转换,但图片转换有些问题,还未来得及进行下一步深入. 代码地址:下载地址 所需安装软件:下载地址 以下是一些注意事项: 1.依赖与jdk1.7版本 2.安装open office之后需要启动服务:soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -n

使用Swagger生成简单接口文档

使用swagger通过简单的配置可以生成简单的接口文档: 依赖包: // Swagger2 compile 'io.springfox:springfox-swagger2:2.8.0' compile 'io.springfox:springfox-swagger-ui:2.8.0' 启动类添加配置: import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.

一个获取获取文档节点的问题

我想获取一下p段落,通过JS代码更改其中的内容,代码如下: 1 <p>第一个段落</P> 2 <button onclick=" changeP()">更换</button> 3 function changeP(){ 4 document.getElementsByTagName('p').innerHTML="更换了的段落"; 5 } 之后发现没有效果,于是换成document.getElementById('p'