文字切割算法-基于投影的切割

本文介绍了一种基于传统横纵投影的文字切割算法,并使用Java与Python实现。算法首先通过横向扫描定位每一行文字,然后纵向扫描进一步分割出单个字符。虽然此方法对数字识别效果较好,但对汉字识别仍存在问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言:

         文字识别的关键之所在就是单个文字的切割,切割的准确度极大的影响了文字识别的正确率。本文基于传统横纵投影的思想对文字进行切割,使用java与python实现了本算法。

 

基本思路:

         1、横向扫描,切出每一行

         2、对每一行进行纵向扫描,得出每一个字

 

经过对原始图像的相关处理,得出如下二值图(仅有黑白色)。这里的‘相关处理’是很复杂的,涉及图像学相关知识,我是通过opencv进行处理的。本文主要对切割算法进行讨论,图片处理部分望读者自行了解。

(待切割图)

横向扫描

         横向扫描就是依次从左往右统计,得出这一行黑色点的数量。比如上图尺寸为1200*430,经过横向扫描就可以得到430个数值,这个数值表示在1200个点中黑色点的数量。我们把这430个数直观的展示出来,可以得到下图:

(横向切割统计图,x:行数   y:黑色点数)

在上图中,y轴数值不为0的区域就是文字存在的地方,为0的区域就是每行之间相隔的距离。我们通过如下规则就可以找出每一行文字的起始点和终止点,以定位该行文字区域:1、如果前一个数为0,则记录第一个不为0的坐标;2、如果前一个数不为0,则记录第一个为0的坐标。形象的说就是从出现第一个非空白行(开始有字)到出现第一个空白行(没有字)这段区域就是文字存在的区域。

(横向切割说明图)

纵向扫描

         纵向扫描与横向扫描同理。针对横向扫描切割出的区域,进行纵向扫描,得出每一个字。

我们对横向扫描得出的第一行进行纵向扫描,可以得到1200个数值,如下图:

(横向切割统计图,x:行数   y:黑色点数  省略了部分区域)

再运用横向扫描的思维,对纵向扫描的数据进行切割,就可以得出单个文字了。

 

切割结果

(切割结果)

         可以看到切割结果有些不理想,会存在很多连在一起的字。

结果分析

         算法对于数字切割十分理想,但是对于汉字会存在切割失败的现象。分析发现部分汉字两两之间没有空白区域,是连在一起的,所以纵向扫描算法就无法准确切割。如下图所示:

所以直接使用投影进行切割,这种方法是不可行的。我们需要对该算法进行优化,以便得出更为准确的结果。优化算法敬请期待下篇(文字切割算法-投影切割优化)。

项目源码:我的github(https://github.com/printlin/tmOcr/tree/master)

在Vue3中,ref是一个函数,用于创建一个响应式的引用。它接受一个初始值作为参数,并返回一个可通过.value访问和修改值的对象。 例如,我们可以使用ref创建一个名为a的引用,并将其初始化为0: const a = ref(0); 我们可以通过访问a.value来获取或修改a的值: console.log(a.value); // 输出0 a.value = 1; console.log(a.value); // 输出1 除了基本类型外,我们还可以为ref的值指定更复杂的类型。可以使用Ref类型来明确指定ref内的值的类型。 例如,我们可以创建一个引用,其值可以是字符串或数字: import type { Ref } from 'vue'; const year: Ref<string | number> = ref('2020'); year.value = 2020; // 成功! 在模板中使用ref时,需要注意自动"解包"只适用于ref作为模板渲染上下文的顶层属性的情况。如果ref是嵌套在对象中的属性,则需要手动解包。 例如,在模板中使用obj.count时,需要通过obj.count.value来访问ref的值: <script setup> import { ref } from 'vue'; const obj = { count: ref(1) } </script> <template> <div>{{ obj.count.value }}</div> </template> 这样,我们就可以正确地使用Vue3中的ref了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Vue3超详细的ref()用法,看这一篇就够了](https://blog.youkuaiyun.com/EchoLiner/article/details/130445600)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值