锐化图像以检测纸上印有“X”对象的边缘/线条

2024-03-26

我正在使用 python 和 opencv。我的目标是检测用树莓派相机拍摄的图像中的“X”形碎片。该项目是我们预先打印井字游戏板,并且每次将新棋子放置到板上时都必须对板进行成像(带有墨水印章)。然后输出表明什么类型的棋子(如果有的话)位于井字棋盘的哪个部分。

在这里,我在图像中检测到的线条呈绿色:

正如您所看到的,“X”形碎片似乎不容易被检测到。有些邮票上只有一行被“看到”。

这是过滤器之后的边缘检测的样子:

我检测“X”形件的方法是检查每个部分是否有任何具有非水平/垂直坡度的线条。我的问题是“X”形印章的线条并不完美;因此,我的代码几乎不符合要求。

我尝试过应用锐化滤波器、使用直方图均衡化以及仅使用灰度进行边缘检测。这些都没有在任何“X”形块中检测到超过 1 条线。

大概我在做什么:

#sharpen image using blur and unsharp method
gaussian_1 = cv2.GaussianBlur(image, (9,9), 10.0)
unsharp_image = cv2.addWeighted(image, 1.5, gaussian_1, -0.5, 0, image)
#apply filter to find stamp pieces, histogram equalization on greyscale
hist_eq = cv2.equalizeHist(unsharp_image)
#edge detection (input,threshold1,threshold2,size_for_sobel_operator)
edges = cv2.Canny(hist_eq,50,150,apertureSize = 3)
#find lines (edges,min_pixels,min_degrees,min_intersections,lineLength,LineGap)
lines = cv2.HoughLinesP(edges,1,np.pi/180,50,minLineLength,maxLineGap)

只是我将其分别应用于电路板的 9 个部分,但这并不重要。

总而言之: 怎样才能让我的形象让我的线条“清晰”、锐利?我想知道我可以用什么来使印有“X”的符号看起来像几行。


您可以尝试使用 Canny 边缘检测器用于确定双阈值的大津鲁棒方法 https://en.wikipedia.org/wiki/Canny_edge_detector#Robust_method_to_determine_the_dual-threshold_value.

im = cv2.imread('9WJTNaZ.jpg', 0)
th, bw = cv2.threshold(im, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
edges = cv2.Canny(im, th/2, th)

然后你可以使用

  • 轮廓凸度缺陷

or

  • 填充轮廓的面积与轮廓边界框的面积之比

以区分十字标记和圆圈。

这就是我将 Canny 应用于您的图像时得到的结果。

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

锐化图像以检测纸上印有“X”对象的边缘/线条 的相关文章

  • Boto3 - 打印 AWS 实例平均 CPU 利用率

    我正在尝试仅打印 AWS 实例的平均 CPU 利用率 此代码将打印出 响应 但最后的 for 循环不会打印平均利用率 有人可以帮忙吗 先感谢您 import boto3 import sys from datetime import dat
  • 在 Python 中打开文本文件时出现问题

    这看起来应该很简单 f open C Users john Desktop text txt r 但我收到此错误 Traceback most recent call last File
  • 如何模拟嵌套函数?

    我想模拟特定函数中的一些嵌套函数 tools py def cpu count def get cpu quota return int load sys fs cgroup cpu cpu cfs quota us def get cpu
  • Python 中的类位于不同的文件中吗?

    与 Java 或 php 非常相似 我习惯将类与文件分开 Python 中也是同样的情况吗 另外 我应该如何命名该文件 像classname py一样小写还是像ClassName py一样 如果我想从此类创建一个对象 我是否需要做一些特殊的
  • Python中基于行输入的条件求和

    我正在尝试用Python 做一个条件和积 简化的思路如下 A 1 1 2 3 3 3 B 0 50 0 25 0 99 0 80 0 70 0 20 我想要作为输出 Total1 0 50 1 0 25 1 Total2 0 99 2 To
  • Google CoLab 中的 Python 3 支持

    我一直在尝试使用 Jupyter 笔记本https colab research google com https colab research google com 并且默认情况下它们似乎运行 Python 2 7 有什么方法可以在 Co
  • 如何为Python的mechanize设置超时值?

    如何为Python的mechanize设置超时值 亚历克斯是正确的 mechanize urlopen需要一个timeout争论 因此 只需插入一些浮点型秒数 http docs python org library socket html
  • 将字符串作为有序字典导入

    我有一个没有扩展名的文件 其中包含这样的行 忽略行之间的间距 但每一行都是单独的行 OrderedDict key1 u value1 key2 value2 OrderedDict key1 u value1 key2 value2 Or
  • pip 安装与本地包具有相同命名空间的包

    我使用的是 Python 3 6 5 通过 miniconda 安装 我的问题是由于我正在安装一个与本地包具有相同命名空间的包 pip 安装此包后 我无法再从本地包导入 我收到一个ModuleNotFoundError错误 如果可能的话 命
  • Numpy - 两个矩阵的行之间的协方差

    我需要计算两个不同矩阵的每一行之间的协方差 即第一个矩阵的第一行与第二个矩阵的第一行之间的协方差 依此类推 直到两个矩阵的最后一行 我可以在没有 NumPy 的情况下使用下面附加的代码来完成此操作 我的问题是 是否可以避免使用 for 循环
  • Linux 中如何确定哪个进程正在使用某个端口

    我目前正在其默认端口上运行 RethinkDB 因为如果我将浏览器指向localhost 8080我看到 RethinkDB Web 界面 我想关闭 RethinkDB 并使用以下命令在另一个端口上重新打开它 port offset争论 然
  • 如何在关心 NaN 值的同时获取数据框中值的百分比变化?

    我有以下数据框 Date A 2015 01 01 10 2015 01 02 14 2015 01 05 NaN 2015 01 06 NaN 2015 01 07 5 2015 01 10 1 2015 01 11 NaN 2015 0
  • 如何在 Python 中将列表变量传递给 subprocess.call 命令

    我有一个清单 apps apps append wq35a5huqlja45jsyukrpmwuiayovrmh apps append q7mimvgduueernwvw4y22t5huemykntw apps append pmudbp
  • 如何从另一个 Python 文件将 Uvicorn FastAPI 服务器作为模块运行?

    我想使用 Uvicorn 从不同的 Python 文件运行 FastAPI 服务器 uvicorn模块 main py import uvicorn import webbrowser from fastapi import FastAPI
  • 如何在 Robot Framework 中将变量定义为具有列表值的字典

    在我的一个测试用例中 我需要定义一个字典 其中键是字符串 值是字符串数组 我怎样才能在机器人框架中做到这一点 我第一次尝试使用如下所示的构造 但行不通 Variables Dictionary A StringA1 StringA2 B S
  • 在 python matplotlib 中格式化损坏的 y 轴

    我正在 matplotlib 中处理一个 相当复杂的 条形图 它包含来自多个源的摘要数据 每个源都沿 x 轴标记 y 轴上有一系列结果 许多结果都是异常值 我尝试使用断开的 y 轴来显示这些结果 而不会使用以下组合来扭曲整个图表这个方法 h
  • 在matplotlib中绘制曲线连接点

    所以我试图绘制曲线来连接点 这是我正在使用的代码 def hanging line point1 point2 a point2 1 point1 1 np cosh point2 0 np cosh point1 0 b point1 1
  • 错误:线条魔术函数

    我正在尝试使用 python 读取文件 但不断收到此错误 ERROR Line magic function user vars not found 我的代码非常基本 names read csv Combined data csv nam
  • Python:计算非整数的阶乘

    我想知道是否有一种快速的 Pythonic 的方法来计算非整数的阶乘 例如 3 4 当然 内置的factorial 函数在Math模块可用 但它仅适用于积分 我不关心这里的负数 你想用math gamma x http docs pytho
  • App Engine、PIL 和叠加文本

    我正在尝试在 GAE 上的图像上覆盖一些文本 现在他们公开了 PIL 库 这应该不是问题 这就是我所拥有的 它有效 但我不禁认为我应该直接写入背景图像 而不是创建单独的覆盖图像然后合并 我可以用吗Image frombuffer http

随机推荐

  • Kotlin - 了解 Getter 和 Setter

    Kotlin 自动生成它的 getter 和设置 但我从不引用它们 另外 在 Kotlin 中编写自定义 getter setter 的正确方法是什么 当我说myObj myVar 99我感到myVar是一个公共领域myObj我直接访问 这
  • Flutter,异步调用后渲染小部件

    我想渲染一个需要 HTTP 调用来收集一些数据的小部件 得到以下代码 简化 import package flutter material dart import dart async import dart convert void ma
  • 如何更新 C# Windows 控制台应用程序中的当前行?

    在 C 中构建 Windows 控制台应用程序时 是否可以写入控制台而无需扩展当前行或转到新行 例如 如果我想显示一个百分比来表示进程距离完成的程度 我只想更新与光标相同的行上的值 而不必将每个百分比放在新行上 这可以通过 标准 C 控制台
  • 如何访问 React Redux 中的存储状态?

    我只是在制作一个简单的应用程序来学习异步与 redux 我已经让一切正常工作 现在我只想在网页上显示实际状态 现在 我如何在渲染方法中实际访问商店的状态 这是我的代码 所有内容都在一页中 因为我刚刚学习 const initialState
  • 从 c++ 为 android (arm) 生成一个 python 库 - 也许用 swig?

    我想在我的项目中包含一个 C 库kivy https kivy org 蟒蛇应用程序 可以自动执行此操作swig https swig org Doc4 1 Python html and 迪斯图尔斯 https docs python o
  • SQL Server 输出子句

    我有点困惑为什么我似乎无法使用下面的语句获得插入行的 新身份 SCOPE IDENTITY 只是返回 null declare WorkRequestQueueID int declare LastException nvarchar MA
  • 图像的色调效果 - iOS

    我只是想知道 是否有可能为图像制作色调效果 但不使用OpenGl ES 最好使用CALayer 我花了一些时间寻找答案 但仍然一无所获 tnx 您是在谈论对图像进行着色吗 一种快速方法 尽管可能不是最好的方法 为此您需要一个自定义解决方案
  • 从 GSL 库中获取 C gsl_fit_linear() 函数中线性回归的 p 值

    我正在尝试用 C 语言重现 R 中的一些代码 因此我尝试使用以下函数来拟合线性回归gsl fit linear 功能 在 R 中 我将使用 lm 函数 它使用以下代码返回拟合的 p 值 lmAvgs lt lm c 1 23 11 432
  • 使所有新目录具有777权限

    我有一个脚本 运行时会在其中创建一个目录 home test 然后在其中写入一些文件 当我运行这个脚本时 它工作得很好 但是 当我从 perl 脚本调用它时 ret home testscript py 它没有权限 因此无法创建该文件夹 或
  • 有没有可用于将 32 位/64 位可执行文件打包在一起的工具? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我真的很喜欢 SysInternals 实用程序 例如 Process Explorer 处理 64 位兼容性的方式 看起来 32 位可执
  • 在 Unix 上连接文本文件中的多个字段

    我该怎么做 File1看起来像这样 foo 1 scaf 3 bar 2 scaf 3 3 File2看起来像这样 foo 1 scaf 4 5 foo 1 boo 2 3 bar 2 scaf 1 00 我想做的是找到同时出现的线条Fil
  • 用 NaN 对矩阵进行排序,提取索引向量并将 NaN 移到末尾

    mockup 3 5 nan 2 4 nan 10 nan 如何在忽略 NaN 的情况下按降序对这个向量进行排序 所得向量的长度必须与mockup 即我需要将所有 NaN 放在末尾 结果应该是这样的 mockupSorted 10 5 4
  • 远程编辑谷歌文档

    我正在尝试向我的网站添加一项功能 如下所示 单击按钮会将文本附加到 Google 文档 显然 我需要在驱动器中创建一个 Apps 脚本 问题是如何从我的网站触发 Apps 脚本 您可以假设我是驱动器 文档的所有者 因此有权以我喜欢的任何方式
  • 在 Swift 中将字符串转换为 CGFloat

    我是 Swift 新手 如何将字符串转换为 CGFloat I tried var fl CGFloat str as CGFloat var fl CGFloat CGFloat str var fl CGFloat CGFloat st
  • 弃用离线访问权限后在 Facebook 上注销/切换用户

    通过脸书弃用离线访问权限 https developers facebook com roadmap offline access removal 5 月 1 日起 Web 应用程序可以轻松延长 OAuth 访问令牌的持续时间 60 天 但
  • JavaScript 中的 setTimeout 是否接受真实(浮点)延迟时间_

    我只是在看JavaScript 计时事件 http www w3schools com js js timing asp 那里说 第二个参数表示从现在开始多少毫秒后您要执行第一个参数 现在 我知道在 JavaScript 中 浮点数和整数都
  • 如果左侧包含 null 并且右侧包含值,则在 sql 中向左移动单元格

    在 Sql 中 我得到如下格式的结果 我总共有 6 列 第一行第 6 列包含该值 第二行第 5 和第 6 列包含该值 但如果前一列不包含该值 我需要检查每个单元格 这意味着我需要在第一列中包含该值 实际结果 a b c d e f 1 1
  • Nodejs、multer、aws S3

    如何应用 uuid 和日期 以便存储在数据库中的文件名和存储在 S3 存储桶中的文件名相同 在当前的实现中 即使帖子是在几小时后发布的 uuid 和日期也始终相同 有人可以帮忙吗 真的很感激 const s3 new AWS S3 acce
  • 基于定义的时间间隔(bin)的时间序列平均值

    这是我的数据集的示例 我想每 10 秒根据时间 即 ts 计算一次 bin 平均值 您能否提供一些提示以便我可以继续 就我而言 我想平均每 10 秒的时间 ts 和 Var 比如我会得到Var和ts从0到10秒的平均值 我将得到另一个 Va
  • 锐化图像以检测纸上印有“X”对象的边缘/线条

    我正在使用 python 和 opencv 我的目标是检测用树莓派相机拍摄的图像中的 X 形碎片 该项目是我们预先打印井字游戏板 并且每次将新棋子放置到板上时都必须对板进行成像 带有墨水印章 然后输出表明什么类型的棋子 如果有的话 位于井字