首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >OpenCV中文档的模式抽取层

OpenCV中文档的模式抽取层
EN

Stack Overflow用户
提问于 2011-12-28 03:06:53
回答 1查看 2.2K关注 0票数 2

首先,通过对图像灰度的80%进行阈值化处理,并反演得到的图像,生成图像的二值化。在二值图像中,白色像素表示字符、图形和线条等。模式提取的第一步是定位矩形区域,称为“rect”。rect是由松散连接的白色像素1组成的矩形区域,它包含文档的某个逻辑部分。我们考虑简单的8邻域连通性,并对二值图像进行连通分量(等高线)分析,从而对文本分量进行分割。对于算法的下一部分,我们使用了轮廓的最小边界矩形。然后,利用最左上角的2D点信息,对这些矩形进行上下排序和从左到右的排序。较小的连接模式被丢弃,因为它们可能起源于依赖于图像采集系统的噪声,而对最终布局没有任何贡献。此外,标点符号也被忽略了,使用较小的大小标准,如逗号、句号等。在这个级别上,我们也以avgh (平均高度)作为阈值,根据边界的高度对字体进行分离。两个阈值用于将字体分为三类--小的、正常的和大的。

n.jpg

你能帮我把这个理论翻译成opencv源代码或者给我任何相关的链接吗,我目前正在为我的论文做文档图像分析。

EN

回答 1

Stack Overflow用户

发布于 2012-04-22 10:14:20

我知道这是迟来的答复。但我认为未来的人可以从中得到帮助。

下面是我从上面理解的答案(所有代码都是OpenCV-Pythonv2.4-beta版):

我把这个当作输入图像。这是一个简单的形象,为了理解。

First we generate the binary image of the give image by thresholding it at 80% of its intensity and inverting the resulting image.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import cv2
import numpy as np

img = cv2.imread('doc4.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(gray,0.8*gray.max(),255,1)
contours, hier = cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

缩影图像:

We considered simple 8-neighborhood connectivity and performed connected component (contour) analysis of the binary image leading to the segmentation of the textual components.

这是简单的轮廓查找在OpenCV,也称为连接组件标签。,它选择图像中的所有白色斑点(组件)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
contours, hier = cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

轮廓:

For next part of algorithm we use the minimum bounding rectangle of contours.

现在我们在每个检测到的轮廓周围找到包围矩形。然后用小区域删除等高线以删除逗号等。参见以下语句:

Smaller connected patterns were discarded based on the assumption that they may have originated due to noise dependent on image acquisition system and does not in any way contribute to the final layout. Also punctuation marks were neglected using smaller size criterion e.g. comma, full-stop etc.

我们还找到了平均身高,avgh

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
height = 0
num = 0
letters = []
ht = []

for (i,cnt) in enumerate(contours):
    (x,y,w,h) = cv2.boundingRect(cnt)
    if w*h<200:
        cv2.drawContours(thresh2,[cnt],0,(0,0,0),-1)
    else:
        cv2.rectangle(thresh2,(x,y),(x+w,y+h),(0,255,0),1)
        height = height + h
        num = num + 1
        letters.append(cnt)
        ht.append(h)

avgh = height/num

因此,在删除所有逗号等之后,围绕选定的矩形绘制绿色矩形:

At this level we also segregate the fonts based on the height of the bounding rect using avgh (average height) as threshold. Two thresholds are used to classify fonts into three categories - small, normal and large (根据给定的通道方程)。

这里的平均身高是40。因此,如果高度小于26.66 (即40x2/3),则为small,如果是height>60,则为normal。但是在给定的图像中,所有的高度都在(28,58)之间,所以所有的高度都是正常的。所以你看不出区别。

因此,我只是做了一个小的修改,以便于可视化:小的如果height<30,正常的if 3050。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (cnt,h) in zip(letters,ht):
    print h
    if h<=30:
        cv2.drawContours(thresh2,[cnt],0,(255,0,0),-1)
    elif 30 < h <= 50:
        cv2.drawContours(thresh2,[cnt],0,(0,255,0),-1)
    else:
        cv2.drawContours(thresh2,[cnt],0,(0,0,255),-1)
cv2.imshow('img',thresh2)
cv2.waitKey(0)
cv2.destroyAllWindows()

现在,您得到的结果是将字母分类为小的、正常的、大的:

These rectangles were then sorted top-to-bottom and left-to-right order, using 2D point information of leftmost-topmost corner.

这部分我省略了。它只是排序所有的包围,重新开始,他们的最左边-最顶端的角落。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8655085

复制
相关文章
基于opencv的gpu与cpu对比程序,代码来自opencv的文档中
http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/gpu/gpu-basics-similarity/gpu-basics-similarity.html
流川疯
2019/01/18
1.6K0
2.基于Label studio的训练数据标注指南:(智能文档)文档抽取任务、PDF、表格、图片抽取标注等
1.基于Label studio的训练数据标注指南:信息抽取(实体关系抽取)、文本分类等
汀丶人工智能
2023/03/04
1.6K2
文档级关系抽取方法,EMNLP 2020 paper
目前大多数关系抽取方法抽取单个实体对在某个句子内反映的关系,在实践中受到不可避免的限制:在真实场景中,大量的关系事实是以多个句子表达的。文档中的多个实体之间,往往存在复杂的相互关系。
机器学习AI算法工程
2021/04/01
1.2K0
文档级关系抽取方法,EMNLP 2020 paper
Python中字段抽取、字段拆分、记录抽取
1、字段抽取 字段抽取是根据已知列数据的开始和结束位置,抽取出新的列 字段截取函数:slice(start,stop) 注意:和数据结构的访问方式一样,开始位置是大于等于,结束位置是小于。 from pandas import read_csv df = read_csv( 'D:\\PDA\\4.6\\data.csv' ) #默认将电话号码按照数值型来处理了,需要先转换为字符型,astype df['tel'] = df['tel'].astype(str) #运营商 bands = df[
Erin
2018/01/09
3.3K0
【信息抽取】NLP中关系抽取的概念,发展及其展望
事物、概念之间的关系是人类知识中非常重要的一个部分,但是他们通常隐藏在海量的非结构文本中。为了从文本中抽取这些关系事实,从早期的模式匹配到近年的神经网络,大量的研究在多年前就已经展开。
用户1508658
2020/07/01
1.1K0
【信息抽取】NLP中关系抽取的概念,发展及其展望
前端 MVVM 模式中的数据层(Model)实战应用
当今时代,React、Vue、AngularJS 三大框架横行,我们很难争论出哪个是最好的框架,但三者共同点是 MVVM 的模式,用一张简单的图可以看到,MVVM 模式最出色的是 ViewModel 层,ViewModel 帮我们摆脱了麻烦的 DOM 操作,相比 MVC 模式有了质的飞跃。
CSDN技术头条
2019/10/31
1.3K0
前端 MVVM 模式中的数据层(Model)实战应用
腾讯文档渲染层 Feature 设计
腾讯文档智能表格的界面是用 Canvas 进行绘制的,这部分称为 Canvas 渲染层。
尹光耀
2023/01/07
1.3K0
腾讯文档渲染层 Feature 设计
OpenCV文档及相关库位置
找了下OpenCV的官方的文档,发现有点隐藏的深: https://docs.opencv.org/4.x/db/deb/tutorial_display_image.html 这是我找到的一个 https://docs.opencv.org/2.4.13.7/modules/core/doc/intro.html 这是我另外找到的一个 https://github.com/opencv/opencv 下载下来的位置 C:\Users\yunswj\Downloads\opencv-4.x\
云深无际
2021/11/12
4550
OpenCV文档及相关库位置
使用OpenCV实现偏斜文档校正
使用OpenCV实现偏斜文档校正 纸质文档扫描中经常会发生扫描出来的图像有一定角度的偏斜,对后期的文档信息化OCR提取造成很大的干扰,导致OCR识别准确率下降从而影响文档信息化的结果。这个时候可以使用OpenCV对文档进行纠偏,最常见的文本纠偏算法有两种,分别是 基于FFT变换以后频率域梯度 基于离散点求最小外接轮廓 这两种方法各有千秋,相对来说,第二种方法得到的结果更加准确,第一种基于离散傅立叶变换求振幅的方法有时候各种阈值选择在实际项目中会有很大问题。 基于FFT变换以后频率域梯度 主要思路是先把图像转
OpenCV学堂
2018/04/04
2.6K0
使用OpenCV实现偏斜文档校正
java框架中的controller层、dao层、domain层、service层、view层[通俗易懂]
Controller层负责具体的业务模块流程的控制,在此层里面要调用Serice层的接口来控制业务流程,控制的配置也同样是在Spring的配置文件里面进行,针对具体的业务流程,会有不同的控制器,我们具体的设计过程中可以将流程进行抽象归纳,设计出可以重复利用的子单元流程模块,这样不仅使程序结构变得清晰,也大大减少了代码量。
全栈程序员站长
2022/07/31
7.1K0
java框架中的controller层、dao层、domain层、service层、view层[通俗易懂]
表现层设计模式
一、理论 1 MVC:模型-视图-控制器 模型: 指应用程序中,业务逻辑入口点对象。模型中包括:应用程序状态、视图展示的数据、响应用户请求的操作、执行控制器请求的操作 控制器: 由视图触发执行某个操作
甜橙很酸
2018/03/08
1.8K0
表现层设计模式
防损层模式
在不共享相同语义的不同子系统之间实施外观或适配器层。 此层转换一个子系统向另一个子系统发出的请求。 使用此模式可确保应用程序的设计不受限于对外部子系统的依赖。 此模式最先由 Eric Evans 在 Domain-Driven Design(域驱动的设计)中描述。
只喝牛奶的杀手
2019/08/26
4520
防损层模式
java框架中的controller层、dao层、domain层、service层、view层
    Controller层负责具体的业务模块流程的控制,在此层里面要调用Serice层的接口来控制业务流程,控制的配置也同样是在Spring的配置文件里面进行,针对具体的业务流程,会有不同的控制器,我们具体的设计过程中可以将流程进行抽象归纳,设计出可以重复利用的子单元流程模块,这样不仅使程序结构变得清晰,也大大减少了代码量。
Twcat_tree
2022/11/30
1.5K0
java框架中的controller层、dao层、domain层、service层、view层
文档模式小记
虽然以前就知道浏览器有文档模式,但是一直对他迷迷糊糊。这本书有说道,于是就仔细看看吧。 文档模式有3种, 混杂模式 标准模式 准标准模式 混杂模式是一般的浏览器在开发者没有声明的时候默认使用(不过这种模式在不同的浏览器下表现的差异很大,一般不要用),因为文档模式是在IE5.5出现时引入的,所以混杂模式的作用是让之后得浏览器版本的行为更像IE5.5,而标准模式则是为了让IE的行为更像标准(遵守W3C的标准),最后一种准标准模式,我就呵呵了,看了半天也没理解书上那简短的一句话讲的是什么,但是度娘说准标准模式在I
用户1749219
2018/05/16
7000
Python-OpenCV,基于标准文档的实例(一)
OpenCV是一个C++库,用于实时处理计算机视觉方面的问题,涵盖了很多计算机视觉领域的模块。
王也518
2022/10/26
7560
Python-OpenCV,基于标准文档的实例(一)
Python-OpenCV,基于标准文档的实例(二)
现在我们来创建一个简单的程序:通过调节滑动条来设定画板颜色。我们 要创建一个窗口来显示显色,还有三个滑动条来设置B,G,R 的颜色。当我们 滑动滚动条是窗口的颜色也会发生相应改变。默认情况下窗口的起始颜色为黑。 cv2.getTrackbarPos() 函数的一个参数是滑动条的名字,第二个参数 是滑动条被放置窗口的名字,第三个参数是滑动条的默认位置。第四个参数是 滑动条的最大值,第五个函数是回调函数,每次滑动条的滑动都会调用回调函 数。回调函数通常都会含有一个默认参数,就是滑动条的位置。在本例中这个 函数不用做任何事情,我们只需要pass 就可以了。 滑动条的另外一个重要应用就是用作转换按钮。默认情况下OpenCV 本 身不带有按钮函数。所以我们使用滑动条来代替。在我们的程序中,我们要创 建一个转换按钮,只有当装换按钮指向ON 时,滑动条的滑动才有用,否则窗 户口都是黑的。
王也518
2022/10/26
4960
Python-OpenCV,基于标准文档的实例(二)
JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
全栈程序员站长
2022/07/20
9740
JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
腾讯文档 SmartSheet 渲染层 Feature 设计
腾讯文档智能表格的界面是用 Canvas 进行绘制的,这部分称为 Canvas 渲染层。
尹光耀
2023/01/08
1.4K0
腾讯文档 SmartSheet 渲染层 Feature 设计
JAVA中Action层, Service层 ,model层 和 Dao层的功能区分
Dao主要做数据库的交互工作 Model 是模型 存放你的实体类 Service 做相应的业务逻辑处理 Action是一个控制器
全栈程序员站长
2022/08/09
1.4K0
Android NDK层编译OpenCV代码开发详解
Android NDK层编译OpenCV代码开发详解 使用Android NDK开发编译OpenCV C++代码,这个在OpenCV4Android开发中会经常遇到的要求,因为OpenCV4Android SDK多数Java代码都是基于JNI调用,如果对于实时性与应用要求比较高的场合来说,多次频繁调用JNI层本身就会导致很大的资源开销,这个时候就需要将全部的处理封装在C++层,在C++中调用OpenCV相关API函数,同时通过在JNI层面定义本地方法,力争做到每次处理图像,只调用JNI一次,这样就会达到比较
OpenCV学堂
2018/04/04
3.3K0
Android NDK层编译OpenCV代码开发详解

相似问题

文本抽取中的文档布局分析

512

大型文档的实体抽取

12

抽取模式“数字/数字”

30

抽取有模式的句子

26

OpenCV中的混合层

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文