首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用opencv检测特定颜色的圆圈

使用opencv检测特定颜色的圆圈
EN

Stack Overflow用户
提问于 2019-07-03 18:14:43
回答 1查看 4.1K关注 0票数 4

我必须使用OpenCV和python检测图像中的黄色圆圈,如第一个图像所示:

一旦我发现黄色的圆圈,我就必须突出显示它,就像这样:

我是OpenCV的新手,所以我在寻求一些指导或帮助。所有的帮助都很感激

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-03 20:36:07

以下是一种潜在的方法:

  • 将图像转换为HSV
  • 查找上/下颜色边界并创建一个掩码。
  • 使用顶点数查找等高线并过滤

我们将图像转换为HSV,然后确定上下边界,使用cv2.inRange()创建掩码。此步骤隔离黄色对象。

代码语言:javascript
运行
复制
image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower = np.array([0, 208, 94], dtype="uint8")
upper = np.array([179, 255, 232], dtype="uint8")
mask = cv2.inRange(image, lower, upper)

在确定形状时,我们使用顶点的数目来寻找轮廓并进行滤波。我们使用cv2.arcLength()cv2.approxPolyDP()来获得顶点和近似轮廓的列表。我们可以检查此列表中的条目数以确定对象的形状。例如,如果等高线有三个顶点,它必须是一个三角形。同样,如果它有四个顶点,它必须是一个正方形。因此,对于这个图像,我们可以假设形状是一个圆,如果它有超过一定数量的顶点。这是结果

代码语言:javascript
运行
复制
import numpy as np
import cv2

image = cv2.imread('1.png')
original = image.copy()
image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower = np.array([0, 208, 94], dtype="uint8")
upper = np.array([179, 255, 232], dtype="uint8")
mask = cv2.inRange(image, lower, upper)

# Find contours
cnts = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# Extract contours depending on OpenCV version
cnts = cnts[0] if len(cnts) == 2 else cnts[1]

# Iterate through contours and filter by the number of vertices 
for c in cnts:
    perimeter = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.04 * perimeter, True)
    if len(approx) > 5:
        cv2.drawContours(original, [c], -1, (36, 255, 12), -1)

cv2.imshow('mask', mask)
cv2.imshow('original', original)
cv2.imwrite('mask.png', mask)
cv2.imwrite('original.png', original)
cv2.waitKey()
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56875876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档