在 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 过滤 的相关文章

  • 理解Python中的元类和继承[重复]

    这个问题在这里已经有答案了 我对元类有一些困惑 具有继承性 class AttributeInitType object def init self kwargs for name value in kwargs items setattr
  • Python lambda 函数没有在 for 循环中正确调用[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Python 中的 Tkinter 制作一个计算器 我使用 for 循环来绘制按钮 并且尝试使用 lambda 函数 以便仅在按下按钮时调用按钮的操作 而不是在程序启动时立即调用 然而 当我尝试这
  • Python:如何删除圆括号内的文本?

    我试过了 但没用 return re sub myResultStats text 建议 thanks 尝试这个 return re sub myResultStats text 括号表示捕获组 因此您必须转义它们
  • 从 SQL Server 中调用 Python 文件

    我的文件名中有 Python 脚本 C Python HL py 在此 Python 脚本中 有预测模型以及对 SQL 数据库中某些表的更新 我想将此文件称为 SQL 作业 我怎样才能做到这一点 这个问题不一样 如何在 SQL Server
  • 使用 asyncore 读取网站

    我想异步阅读一个网站 据我所知 这是不可能的 urllib 现在我尝试使用普通套接字进行阅读 但是 HTTP 给我带来了麻烦 我遇到了各种时髦的编码 例如传输编码 分块 必须手动解析所有这些东西 我现在想编码 C 而不是 python 难道
  • Django url 模式 - 带正斜杠的参数

    如何为两个参数创建 url 模式 其中第一个参数包含正斜杠作为其内容的一部分 da ta1 data2 最初我有以下模式 r view P
  • python中的语音识别持续时间设置问题

    我有一个 Wav 格式的音频文件 我想转录 我的代码是 import speech recognition as sr harvard sr AudioFile speech file wav with harvard as source
  • 无法将 python 数据框中的列类型从 object 转换为 str

    我已经下载了一个csv文件 然后将其读取到python dataframe 现在所有4列都有对象类型 我想将它们转换为str类型 现在dtypes的结果如下 Name object Position Title object Departm
  • 设置区域设置和字符串模块

    这个简单的脚本 from locale import LC ALL setlocale print setlocale LC ALL from string import letters print letters 给我这个输出 tr TR
  • Python 中 Goto 标签的替代方案?

    我知道我不能使用 Goto 我也知道 Goto 不是答案 我读过类似的问题 但我只是想不出解决我的问题的方法 所以 我正在编写一个程序 你必须在其中猜测一个数字 这是我遇到问题的部分的摘录 x random randint 0 100 I
  • Python、cPickle、酸洗 lambda 函数

    我必须像这样腌制一组对象 import cPickle as pickle from numpy import sin cos array tmp lambda x sin x cos x test array tmp tmp tmp tm
  • 包装 C++ Qt 小部件以便在 Python 中与 PySide 一起使用

    在 Python 中使用自定义 Qt 显示小部件包装自定义 C 库以便在基于 PySide 的 QApplication 中使用的最佳方法是什么 C 库是否需要特殊处理才能使用 SWIG 进行包装 封装的 Qt 小部件能否与 PySide
  • 将 Matlab MEX 文件中的函数直接嵌入到 Python 中

    我正在使用专有的 Matlab MEX 文件在 Matlab 中导入一些仿真结果 当然没有可用的源代码 Matlab 的接口实际上非常简单 因为只有一个函数 返回一个 Matlab 结构体 我想知道是否有任何方法可以直接从Python调用M
  • 带回溯的 Dijkstra 算法?

    In a 相关主题 https stackoverflow com questions 28333756 finding most efficient path between two nodes in an interval graph
  • 计算素数并附加到列表

    我最近开始尝试使用 python 解决 Euler 项目的问题 并且在尝试计算素数并将其附加到列表中时遇到了这个障碍 我编写了以下代码 但我很困惑为什么它在运行时不输出任何内容 import math primes def isPrime
  • Windows 10 上的 Tensorflow 安装问题

    我正在尝试在 Win 10 计算机上安装 Tensorflow 我成功安装了Python 3 7 然后尝试按照tensorflow org上的安装说明进行操作 执行时 pip install tensorflow 我收到以下错误消息 错误
  • 矩阵求逆 (3,3) python - 硬编码与 numpy.linalg.inv

    对于大量矩阵 我需要计算定义为的距离度量 尽管我确实知道强烈建议不要使用矩阵求逆 但我没有找到解决方法 因此 我尝试通过对矩阵求逆进行硬编码来提高性能 因为所有矩阵的大小均为 3 3 我预计这至少会是一个微小的改进 但事实并非如此 为什么
  • mypy 错误:赋值中的类型不兼容(表达式的类型为“Dict[, ]”,目标的类型为“List[str]”)

    我尝试过了实例化一个空字典在现有字典的第二层上 然后为其分配一个键值对 但 MyPy 会抛出错误 这是一个最小的示例 当激活 MyPy 检查时它将重现它 result Test something result key result key
  • 张量流多元线性回归不收敛

    我正在尝试使用张量流训练具有正则化的多元线性回归模型 由于某种原因 我无法获取以下代码的训练部分来计算我想要用于梯度下降更新的误差 我在设置图表时做错了什么吗 def normalize data matrix averages np av
  • 如何访问模板缓存? - 姜戈

    I am 缓存 HTML在几个模板内 例如 cache 900 stats stats endcache 我可以使用以下方式访问缓存吗低级图书馆 例如 html cache get stats 我确实需要对模板缓存进行一些细粒度的控制 有任

随机推荐

  • 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 但没有帮助 这是