【问题标题】:How to find a colors "Upper" and "Lower" range of a color?如何找到颜色的“上”和“下”范围?
【发布时间】:2020-06-30 14:00:02
【问题描述】:

我刚刚开始学习使用 opencv 进行颜色过滤。我已经了解了大部分基础知识,但仍然坚持一件事。

import cv2
import numpy as np

img = cv2.imread("Circles.png")

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

lower_range = np.array([169,100,100])
upper_range = np.array([189,255,255])

mask = cv2.inRange(hsv, lower_range, upper_range)

cv2.imshow("Image", img)
cv2.imshow("Mask",mask)

cv2.waitKey(0)
cv2.destroyAllWindows()

在哪里可以找到要过滤的颜色范围?

谢谢

【问题讨论】:

  • 将 bgr 颜色的上下范围转换为 hsv 颜色。采用任何颜色,将 +- 值添加到 bgr 值,使用 cvtColor 转换为 HSV。将这些用于 HSV 中的上限值和下限值。您可能需要使用一些外部工具来获取主要的 bgr 颜色,例如 GIMP 或 Photoshop。还有一些方法可以使用 OpenCV 来测量颜色。

标签: python opencv


【解决方案1】:

所以基本上,您要做的基本上是过滤掉一种颜色。默认情况下,图像以蓝色、绿色和红色三个通道表示。但是,使用这种表示模式,您无法轻松过滤颜色,因为值被分成三个通道。这就是 HSV(色相、饱和度、值)表示模式发挥作用的地方。

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 行将 BGR 格式图像转换为 HSV 格式表示。 现在,您可以获得所需颜色的值,只需将 +-delta 值添加到 H 通道,您就可以相应地过滤颜色。

例如,如果要过滤绿色 格力颜色的 BGR 表示将是 (0,255,0)。首先,我们需要在 HSV 中找到等效的颜色表示,即 (60,255,255)。我们可以相应地添加 [H-10, 100,100] 和 [H+10, 255, 255] 作为上下限值。

您可以使用任何 BGR 将其转换为相应的 HSV 值。

color_bgr=np.uint8([[[0,255,0]]])
color_hsv = cv2.cvtColor(color_bgr,cv2.COLOR_BGR2HSV)
print(color_hsv)

请参考此链接了解更多详情 https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_colorspaces/py_colorspaces.html

【讨论】:

  • 我想我明白了
  • 我使用红色的上限和下限公式。 RGB 代码为 255,0,0)。我使用了您提供的代码并将其转换为 HSV 格式。我得到了(120,255,255)。我使用公式并将下限设为 (110,100, 100),将上限设为 (130,255,255)。在这个网站上,codeloop.org/opencv-python-color-detection-example,你可以找到下面的图片。输出是蓝色圆圈而不是读取的圆圈。这是为什么呢?
  • 所以基本上红色的 RGB 代码是 (255,0,0),但是在 OpenCV 中,通道的顺序是 BGR(蓝色、绿色、红色),所以红色的代码是 ( 0,0,255)。你给的东西将被视为蓝色。这就是发生这种情况的原因。
  • 我了解 OpenCV 以 BGR 顺序进行通道的部分。我输入数字,输出将是(0,0,255)。我使用了公式,得到了 (-10,100,100) 的下限和 (10,255,255) 的上限。当我运行它时,什么都没有出现。这是为什么呢?
猜你喜欢
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多