如何在opencv中分割手写和打印数字而不丢失信息?

2023-11-29

我编写了一种算法,可以检测打印和手写数字并将其分段,但是在使用滑雪图像包中的clear_border删除外部矩形手写数字时会丢失。任何阻止信息的建议。

Sample:
enter image description here

如何分别获得全部5个角色?


从图像中分割字符 -

方法 -

  1. 对图像进行阈值处理(将其转换为黑白)
  2. 执行扩张
  3. 检查轮廓是否足够大
  4. 查找矩形轮廓
  5. 获取 ROI 并保存角色

Python 代码 -

# import the necessary packages
import numpy as np
import cv2
import imutils

# load the image, convert it to grayscale, and blur it to remove noise
image = cv2.imread("sample1.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (7, 7), 0)

# threshold the image
ret,thresh1 = cv2.threshold(gray ,127,255,cv2.THRESH_BINARY_INV)

# dilate the white portions
dilate = cv2.dilate(thresh1, None, iterations=2)

# find contours in the image
cnts = cv2.findContours(dilate.copy(), cv2.RETR_EXTERNAL,
    cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if imutils.is_cv2() else cnts[1]

orig = image.copy()
i = 0

for cnt in cnts:
    # Check the area of contour, if it is very small ignore it
    if(cv2.contourArea(cnt) < 100):
        continue

    # Filtered countours are detected
    x,y,w,h = cv2.boundingRect(cnt)

    # Taking ROI of the cotour
    roi = image[y:y+h, x:x+w]

    # Mark them on the image if you want
    cv2.rectangle(orig,(x,y),(x+w,y+h),(0,255,0),2)

    # Save your contours or characters
    cv2.imwrite("roi" + str(i) + ".png", roi)

    i = i + 1 

cv2.imshow("Image", orig) 
cv2.waitKey(0)

首先,我对图像进行阈值处理,将其转换为黑白。我得到图像白色部分的字符和黑色背景。然后我放大图像以使字符(白色部分)变粗,这将很容易找到合适的轮廓。然后find使用findContours方法来寻找轮廓。然后我们需要检查轮廓是否足够大,如果轮廓不够大则被忽略(因为该轮廓是噪声)。然后使用boundingRect方法来找到轮廓的矩形。最后,保存并绘制检测到的轮廓。

输入图像 -

Input

临界点 -

Thresh

扩张 -

Dilate

轮廓 -

Contours

已保存的字符 -

char2 char0 char1 char3

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在opencv中分割手写和打印数字而不丢失信息? 的相关文章

  • ModuleNotFoundError:没有名为“bs4”的模块

    当我尝试像这样导入 BeautifulSoup 时 from bs4 import BeautifulSoup 当我运行我的代码时 我收到此错误消息 ModuleNotFoundError No module named bs4 如果有人知
  • 如何使用 colorchecker 在 opencv 中进行颜色校准?

    我有数码相机获取的色彩检查器图像 我如何使用它来使用 opencv 校准图像 按照以下颜色检查器图像操作 您是想问如何进行颜色校准或如何使用 OpenCV 进行校准 为了进行颜色校准 您可以使用校准板的最后一行 灰色调 以下是您应该逐步进行
  • 加速 C# 中的矩阵加法

    我想优化这段代码 public void PopulatePixelValueMatrices GenericImage image int Width int Height for int x 0 x lt Width x for int
  • 如何从下面的html中提取数据?

    我想要从中提取数据的 Html 是 div class infoMessageInner p span class ng binding Fiber r best lld till adressen Tj nsterna kan du be
  • 如何在PIL中从ImageDraw中获取图像?

    我在我的项目中使用 PIL 并且有 ImageDraw 对象 我想获取在 ImageDraw 对象上绘制的图像 我如何获取图像 这是你想要的 from PIL import Image ImageDraw im Image new RGBA
  • 使用 Apache Beam python 创建 Google 云数据流模板时出现 RuntimeValueProviderError

    我无法使用 python 3 7 暂存云数据流模板 它在一个参数化参数上失败了apache beam error RuntimeValueProviderError RuntimeValueProvider option input typ
  • 带表格格式的 Matplotlib 条形图

    我在图的底部添加了一个表格 但它存在许多问题 右边的内边距太多了 左边的填充太少 底部没有填充物 单元格对于其中的文本来说太小 该表距离图的底部太近 属于行名称的单元格的颜色未与条形图的颜色相匹配 我要发疯了 去摆弄这个 有人可以帮我解决这
  • Jupyter Notebook 找不到 Python 模块

    不知道发生了什么 但每当我使用 ipython 氢 原子 或 jupyter 笔记本时都找不到任何已安装的模块 我知道我安装了 pandas 但笔记本说找不到 我应该补充一点 当我正常运行脚本时 python script py 它确实导入
  • 使用 ruby​​ 调整动画 GIF 图像的大小?

    我正在尝试将 GIF 图像调整为不同的尺寸 我在 ruby 中使用 RMagick 库 但对于某些 gif 图像 即使我缩小 GIF 的大小 文件大小似乎也会增加 我正在以相同的纵横比调整图像图像的大小 这是我的代码 require rma
  • 是否可以在 PyScript 中使用 OpenCV 模块?

    我想使用 opencv 模块 但无法导入 OpenCV 那么我该如何解决这个问题呢 顺便说一句 Pyodide 支持 OpenCV 示例代码 https i stack imgur com ahwex jpg 尚不支持 OpenCV 此时O
  • Pandas 中的 Groupby、转置和追加?

    我有一个数据框 如下所示 每个用户有10条记录 现在 我想创建一个如下所示的数据框 userid name1 name2 name10 这意味着我需要反转该列的每 10 条记录name并附加到新的数据框 那么 它是如何做到的呢 有什么办法可
  • PyCharm 表示 readline 导入未被使用

    我有这个代码 while True cmd input gt if cmd exit break 但我想实现高级文本输入功能 例如命令历史记录 因此我导入了 readline 模块 导入 readline 模块 甚至不使用它 将解锁这些功能
  • 更新到 Django 1.8 - AttributeError: django.test.TestCase 没有属性 'cls_atomics'

    我将 Django 1 7 项目更新为 Django 1 8 现在运行测试时出现错误 它们是 Django 的子类 django test TestCase Traceback most recent call last File env
  • Python:返回 // 正则表达式之间的字符串[重复]

    这个问题在这里已经有答案了 我仍然不明白正则表达式 我阅读了文档 但是在我想出了正则表达式字符之后 那么如何使用它们呢 例如 我只想返回前两个斜杠之间的任何内容 en lemon peel n ca llimona n is 的输出应该是
  • str.translate 与 str.replace - 何时使用哪一个?

    何时以及为什么使用前者而不是后者 反之亦然 目前尚不完全清楚为什么有些人使用前者以及为什么有些人使用后者 它们有不同的目的 translate只能用任意字符串替换单个字符 但一次调用可以执行多次替换 它的参数是一个特殊的表 它将单个字符映射
  • 无法在 virtualenv 中安装 libxml2

    我有一个问题libxml2蟒蛇模块 我正在尝试将其安装在python3 虚拟环境使用以下命令 pip install libxml2 python3 但它显示以下错误 Collecting libxml2 python3 Using cac
  • 在请求中设置端口

    我正在尝试利用cgminer使用 Python 的 API 我对利用requests图书馆 我了解如何做基本的事情requests but cgminer想要更具体一点 我想缩小 import socket import json sock
  • 使用 Python 绘制 USGS 水文数据甘特图?

    我编译了一个数据帧 其中包含几个不同流计的 USGS 流数据 现在我想创建一个类似的甘特图this https stackoverflow com questions 31820578 how to plot stacked event d
  • 没有名为“turtle”的模块

    我正在学习并尝试用Python3制作贪吃蛇游戏 我正在进口海龟 我正在使用 Linux mint 19 PyCharm python37 python3 tk Traceback most recent call last File hom
  • 如何同时接受int和float类型的输入?

    我正在制作一个货币转换器 如何让 python 同时接受整数和浮点数 我就是这样做的 def aud brl amount From to ER 0 42108 if amount int if From strip aud and to

随机推荐

  • file_get_contents(): open_basedir 限制生效

    我收到一条奇怪的错误消息 file get contents open basedir 限制生效 文件 path to file 不在允许的路径内 Library WebServer var tmp path to 如图所示 文件的路径已添
  • Ruby on Rails CSV 上传和导入 - 文件名太长

    我想让管理员通过 csv 文件将联系人导入数据库 因此我使用 ruby csv 库和以下代码片段 if request post params file present inputFile params file read CSV fore
  • 为什么我们使用用户控件?

    我已经研究这个有一段时间了 但我无法得出结论 什么是用户控制 对我来说 我们可以通过创建新的窗口窗体而不是用户控件来完成所有操作 我知道有一个使用的理由 但现在还不清楚 如果有人能解开这个谜团那就太好了 用户控件基本上是其他现有控件的分组
  • Spring 与 java DSL 集成中的免费队列通道

    我有一个存储消息的频道 当新消息到达时 如果服务器尚未处理所有消息 仍在队列中 我需要清除队列 例如 通过将所有数据重新路由到另一个通道 为此 我使用了路由器 但问题是 当新消息到达时 不仅旧消息而且新消息都会重新路由到另一个通道 新消息必
  • 如何在 Groovy Jenkins Pipeline 中使用全局外部 java 库的方法?

    首先 我是 Java Groovy 和 Jenkins 的新手 所以请耐心等待 我正在准备一个支持 Pipeline 的 Jenkins 服务器 以便将来在我们的构建环境中使用 我们使用一种特殊的内部脚本语言 我必须用 java 编写一个包
  • 序列化包含字典的对象,以便字典键/值呈现为包含对象的一部分[重复]

    这个问题在这里已经有答案了 我有一堂课如下 public class Usage public string app get set public Dictionary
  • WCF Restful 服务的 Http Post 格式

    嘿 超级新手问题 考虑以下 WCF 函数 ServiceContract AspNetCompatibilityRequirements RequirementsMode AspNetCompatibilityRequirementsMod
  • Linux:从用户空间实例化:eeprom new_device

    环境 x86 Ubuntu 14 04 我想获得类似的东西 i2c0 eeprom eeprom 50 compatible at 24c32 reg lt 0x50 gt 但因为在 x86 中没有可用的设备树 所以我遵循i2c insta
  • 过滤具有 None 值的 Pyspark 数据框列

    我正在尝试过滤具有以下内容的 PySpark 数据框None作为行值 df select dt mvmt distinct collect Row dt mvmt u 2016 03 27 Row dt mvmt u 2016 03 28
  • 如何在检查 Servlet 中的标头后删除请求正文

    我想在继续处理正文之前检查请求的标头是否包含某个标头 例如 我想检查 multipart form data 是否包含 Authorization 是否在标题中 如果不是 则无需继续上传分段正文 分段正文通常对于文件上传来说相当大 serv
  • 当我使用 google-apps-script 脚本查看 Gmail 中的电子邮件时,如何检测?

    我想每次在 Gmail 中查看电子邮件时触发一个脚本 有谁知道是否有一个触发器可以检测我可以绑定的这个 我愿意在任何平台上执行此操作 而不仅仅是 google apps script 简短回答 目前 Google Apps 脚本没有 Gma
  • 自动完成的简单 Solr 模式问题

    我有一个非常简单的 SQL 表 我想将其导入到 Solr 中 但由于我想要搜索的功能 我无法确定最佳模式 用户将开始在输入框中键入内容 在 3 个字符后 它将向服务器发送请求并提取最相关的结果 返回前 15 个匹配的 ID 和名称 表例 i
  • 使用 jQuery DatePicker 动态更改 minDate 和 maxDate

    我在使用 jQuery Datepicker 时遇到了一个特殊问题 我可以轻松添加日期范围 但我希望可选范围根据用户选择的事件进行更改 因此 如果他们选择事件 1 则只能从事件 1 的日期范围中选择日期 我编写了一个简单的小函数 每当用户选
  • 如何允许引导选项卡的选项卡在 ckeditor 编辑器中工作?

    这是我正在努力应对的挑战 我有一个用户希望能够使用单个 ckeditor 实例中的引导选项卡来浏览不同的选项卡 我了解大多数 a 标签禁用链接的原因 但希望仅允许这些选项卡链接发生该事件 我附上了一张屏幕截图 显示编辑器的内容中有一个引导选
  • 在 Google BigQuery 中使用 regexp_extract 提取数据

    我正在尝试从具有多个字符的列中提取数据 并且我只对从输入字符串中获取特定字符串感兴趣 我的示例输入和输出如下 我如何使用 regexp extract 函数来实现这一点 如果您从事过 GBQ 工作 有人可以分享他们对此的想法吗 谢谢 SQL
  • 在 SQL Server 中,“SET ANSI_NULLS ON”是什么意思?

    定义说 当 SET ANSI NULLS 为 ON 时 使用 WHERE column name NULL 的 SELECT 语句将返回零行 即使 column name 中存在空值也是如此 即使 column name 中存在非空值 使用
  • Google AppEngine中的JSP是否支持JDK1.8

    我有一个应用程序引擎Eclipse 中的项目 我保留了一个JSP file在 WAR 文件夹中 我已将安装的 jre 中的路径指定为JDK1 8 现在当我运行该项目时local单击超链接后 JSP 文件成功加载 部署到 Google App
  • 计算文件行数的最快方法

    我有一个巨大的 CSV 文件 我想知道它的总行数其中 目前我正在使用类似的东西 它工作完美 但速度很慢 FIND c FILENAME csv 但我不知道这是否是迭代 CSV 中所有行的最快方法 有什么建议或者方法可以教教我吗 我的 CSV
  • 在 Xamarin Forms 中定义 xmlns

    我创建了一个 Xamarin Forms 应用程序 我创建了另一个 PCL 库来保存颜色代码等 UI 常量 可移植项目名称为App PCL 库项目是实用程序 在我的 PCL 库中定义了这个 namespace App Utilities p
  • 如何在opencv中分割手写和打印数字而不丢失信息?

    我编写了一种算法 可以检测打印和手写数字并将其分段 但是在使用滑雪图像包中的clear border删除外部矩形手写数字时会丢失 任何阻止信息的建议 Sample 如何分别获得全部5个角色 从图像中分割字符 方法 对图像进行阈值处理 将其转