在 python 中使用 opencv 进行 Blob 过滤

2024-04-20

需要从图像中检测红色并根据屏幕尺寸获取坐标。

  • 使用掩模获取图像中具有红色的部分
  • 将其转换为 BW
  • 对其应用高斯滤波器。

最终图像具有较小的主体,我需要将其删除并获取其余部分的坐标。我尝试了 SimpleBlobDetector,但没有帮助。这是我的代码 -

import cv2
import numpy as np
from PIL import Image

img=cv2.imread("D:\Ankur\Free\line.png")
img_hsv=cv2.cvtColor(img, cv2.COLOR_BGR2HSV)


lower_red = np.array([0,50,50])
upper_red = np.array([10,255,255])
mask0 = cv2.inRange(img_hsv, lower_red, upper_red)


lower_red = np.array([170,50,50])
upper_red = np.array([180,255,255])
mask1 = cv2.inRange(img_hsv, lower_red, upper_red)


mask = mask0+mask1


output_img = img.copy()
output_img[np.where(mask==0)] = 0


gray = cv2.cvtColor(output_img, cv2.COLOR_BGR2GRAY)

#Adaptive Gaussian Thresholding
gray = cv2.medianBlur(gray,5)
th3 = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)
cv2.imshow("images", th3)
#cv2.ims
cv2.waitKey(0)

这是我正在使用的图像和最终图像 -

原图:

高斯滤波器后


如果您正在使用 OpenCV 3.0,我建议您看看connectedComponentsWithStats功能。

另外,下面的代码片段通过打开和关闭来清理图像,然后找到轮廓。然后绘制轮廓和轮廓中心。

# Create a kernel
kernel = np.ones((7,7),np.uint8)
# Use opening to fill the blobs
opened = cv2.morphologyEx(th3, cv2.MORPH_OPEN, kernel)
# Use closing to disconnect the bridges
closed = cv2.morphologyEx(opened, cv2.MORPH_CLOSE, kernel)

# Create a color image to show the result
new_img = cv2.cvtColor(closed, cv2.COLOR_GRAY2BGR)
# Invert the image 
closed=255-closed
# Find contours
contours, hierarchy = cv2.findContours(closed, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

for cnt in contours:
    # Skip if the contour area is small
    area = cv2.contourArea(cnt)
    if area < 500:
        continue
    # Draw the contour
    cv2.drawContours(new_img, [cnt], -1, (0, 255, 0), 2)
    # Find the center
    M = cv2.moments(cnt)
    cX = int(M["m10"] / M["m00"])
    cY = int(M["m01"] / M["m00"])
    # Draw the center
    cv2.circle(new_img, (cX, cY), 7, (0, 0, 255), -1)

cv2.imwrite("result.png",new_img)

我得到了以下结果,希望这是您所描述的,并希望它也适合您。

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

在 python 中使用 opencv 进行 Blob 过滤 的相关文章

  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图

随机推荐

  • RNGCryptoServiceProvider 已过时

    我需要使用随机数字和字母生成令牌 但是 错误消息告诉我使用 RandomNumberGenerator 它只会给我随机数 这没有帮助 错误信息 RNGCryptoServiceProvider 已过时 RNGCryptoServicePro
  • Scrapy 阿拉伯字母返回一些奇怪的东西

    我在用scrapy关于阿拉伯字母和英文字母 英文字母完美地工作 然而 阿拉伯字母显示如下 gs300 2006 u0644 u0643 u0632 u0633 u062c u064a 有什么帮助吗 我正在使用 python 和 scrapy
  • 如何编写一个程序来通过 Android 设备安装和卸载应用程序?

    我想编写一个程序 可以通过 Android 设备安装和卸载应用程序 由于这些功能是通过 Android 设备提供的 但是我应该从哪里开始以及需要查看哪些文件来开发我自己的应用程序 请帮帮我 提前致谢 Praween 对于这样的安装代码 In
  • 使用委托调用构造函数

    I found this http blogs msdn com haibo luo archive 2005 11 17 494009 aspx但尝试使用它但失败了 如何使用反射创建对象并通过将其放入委托中来使其快速 DynamicMet
  • 多租户主键的最佳方法

    我有一个被多个客户使用的数据库 我真的不希望代理增量键值在客户端之间流动 我希望编号从 1 开始并针对特定客户 我将使用由两部分组成的复合键tenant id以及增量 id 为每个租户创建增量密钥的最佳方法是什么 我正在使用 SQL Ser
  • Android 滚动视图不会一直向下滚动

    我查看了很多问题 但列出的解决方案都没有解决我的问题 Scrollview 不会滚动到底部边缘 https stackoverflow com questions 17124680 scrollview doesnt scroll to t
  • 获取 mysql 的最后插入 ID 如何与事务一起使用? + 交易问题

    一个由两部分组成的问题 在我的 CodeIgniter 脚本中 我启动一个事务 然后插入一行 将 insert id 设置为 php 变量 使用新 ID 作为外键将更多行插入到另一个表中 然后提交所有内容 所以我的问题是 如果在结束事务之前
  • 如何打印列表的值?

    我有一个Python问题 假设给你一个向量 x 包含大部分为零的实值 例如 x 0 0 0 87 0 0 0 0 0 0 0 32 0 46 0 0 0 0 0 10 0 0 0 0 完成功能 compress vector x 这样就返回
  • 如何将替换正则表达式作为命令行参数传递给 perl 脚本

    我正在尝试编写一个简单的 perl 脚本 以将给定的正则表达式应用于文件名等 但我在将正则表达式作为参数传递到脚本中时遇到问题 我希望能够做的是这样的 gt myscript s hi bye i hi h bye h gt 我已经生成了这
  • 警告: PDO::__construct(): [2002] 中没有这样的文件或目录(尝试通过 unix:///tmp/mysql.sock 连接)

    我的代码昨天工作得很好 今天它突然不想连接到我的数据库 我没有更改它或代码上的任何设置 也没有更新任何软件 我所做的就是这样 new PDO mysql host localhost port 3306 dbname test userna
  • 检查互联网连接的 Android 服务?

    我想创建一个 Android 服务 每当断开连接以及互联网再次重新连接时 它都会通知主要活动 我有以下功能来检查互联网连接 private boolean haveInternet NetworkInfo info NetworkInfo
  • 作为文字类型无效?

    在 C 14 中void是文字类型 如果某个类型满足以下条件 则该类型是文字类型 空白 或者 标量类型 或者 参考类型 或者 文字类型的数组 或者 具有以下所有属性的类类型 第 9 条 它有一个简单的析构函数 它是一种聚合类型 8 5 1
  • 日期时间在转换时出错

    我有这种甲酸盐的字符串 19 8 1988 note String DateOfBirth 19 8 1988 当我使用Datetime parse DateOfBirth 它给了我invalid dateformat error 我也无法
  • 如何在 Excel 中创建自定义数字格式以将逗号显示为小数点分隔符

    例如 代替4 100 3 美国 这将是4 100 3 Go to Tools Options International Tab or Advanced if using Office 2010 Separators 取消选中 使用系统分隔
  • 如何使用 swift 从 firebase 中的 JSON 文件中获取电子邮件 ID

    JSON 图像 https i stack imgur com V7yZA png我想查询如下 如果我提供电子邮件 那么我必须获取 ID 目前我可以获取电子邮件或 ID 但我需要以下示例的解决方案 例如 1 如果我给 email prote
  • 使用 SUM() 而不对结果进行分组

    我已经读过 this https stackoverflow com questions 2381053 how to apply a sum operation without grouping the results in sql 但无
  • 想要产生1-45之间的随机数而不重复

    我遇到了一个非常奇怪的问题 我试图找到它的解决方案但徒劳 我的问题是我想创建一个 1 45 之间的随机数 并且不希望该数字再次重复 根据定义 随机选择将随机重复 但是 您可以构建一个包含每个数字的数组 然后对数组进行打乱 生成随机顺序的数字
  • 如何使用 AWS CLI 创建 AWS Lambda 函数?

    我正在尝试使用以下命令创建 AWS Lambda 函数 aws lambda create function function name foo runtime nodejs role lambda basic execution hand
  • 监控所有验证事件

    It s quite easy https stackoverflow com a 565560 1997232 to check if certain container or its children have validation e
  • 在 python 中使用 opencv 进行 Blob 过滤

    需要从图像中检测红色并根据屏幕尺寸获取坐标 使用掩模获取图像中具有红色的部分 将其转换为 BW 对其应用高斯滤波器 最终图像具有较小的主体 我需要将其删除并获取其余部分的坐标 我尝试了 SimpleBlobDetector 但没有帮助 这是