在 Python 中使用 OpenCV 的 HSV 颜色空间

Manav Narula 2023年1月30日
  1. HSV 颜色空间
  2. 在 OpenCV 中将图像转换为 HSV 颜色空间
  3. 在 OpenCV 中使用 HSV 颜色空间检测颜色
  4. 结论
在 Python 中使用 OpenCV 的 HSV 颜色空间

在编程中处理图像时,我们将它们转换为具有数值的变量并处理这些值。每个图像都可以有一些想要的颜色。

我们使用颜色模型将这些颜色映射到数值。一些常见的颜色模型是 RGB、CMYK、HSV 等。

我们可以使用 opencv 库在 Python 中处理和处理图像和视频。这个库充满了可以为图像实现复杂算法和技术的函数。

本教程将讨论 opencv 库中的 HSV 颜色空间。

HSV 颜色空间

默认情况下,RGB 颜色模型表示图像中的颜色。这是因为 RGB 是图形中最常用的颜色模型,可以表示范围广泛的颜色。

然而,最有用的模型之一是 HSV 模型。

HSV 模型用于以圆柱形表示 RGB 模型的颜色范围。该色彩空间高度用于对象跟踪。

HSV 颜色模型代表 HueSaturation 和 Brightness (Value)。

Hue 属性用于指定正在使用的颜色的色调,Saturation 属性确定使用颜色的量。Value 属性用于指定颜色的亮度。

在 OpenCV 中将图像转换为 HSV 颜色空间

使用 opencv 库,我们可以将图像从一种颜色空间转换为另一种颜色空间。为此,我们使用 cvtColor() 函数。

当使用 imread() 函数读取图像时,它位于 RGB 颜色空间中。我们可以使用 cvtColor() 函数将其转换为 HSV。

请参阅以下示例。

import cv2

i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2HSV)
cv2.imshow("Final", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

输出:

使用 cvtColor 函数将图像从 RGB 转换为 HSV

在上面的示例中,请注意 cvtColor() 函数中指定的 cv2.BGR2HSV 属性。它指定我们将图像从 RGB 颜色空间转换为 HSV。

waitKey()destroyAllWindows() 函数的组合用于等待用户在关闭输出窗口之前按下某个键。

cv2.BGR2HSV 将图像从 RGB 转换为 HSV 范围为 0 到 180。我们还可以使用 cv2.BR2HSV_FULL 将图像转换为 HSV 范围为 0 到 255 .

在 OpenCV 中使用 HSV 颜色空间检测颜色

如前所述,此颜色空间的主要用途是用于对象跟踪。我们可以使用这个模型来创建可以映射图像中某些特定颜色的蒙版。

HSV 模型中的每种颜色都有一定的颜色范围。它们范围的上限和下限可用于检测颜色。

我们可以使用 inRange() 函数返回一个二进制掩码,该掩码使用 HSV 颜色空间的上限和下限检测给定颜色。

请参阅下面的代码。

import cv2
import numpy as np

img = cv2.imread("img3.jpeg")
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
bound_lower = np.array([25, 20, 20])
bound_upper = np.array([100, 255, 255])
mask_green = cv2.inRange(hsv_img, bound_lower, bound_upper)
cv2.imshow("Mask", mask_green)

cv2.waitKey(0)
cv2.destroyAllWindows()

输出:

使用 inRange 函数使用 HSV 范围查找颜色

在上面的示例中,我们创建了一个二进制掩码来检测图像中的绿色。图像被转换为​​ HSV 颜色空间,并定义了绿色的范围。

我们使用 inRange 函数的上限和下限来检测颜色并返回掩码。

可以将此蒙版映射到图像上以检测颜色并绘制给定颜色的边界。

结论

本教程讨论了颜色空间,并专注于 opencv 中的 HSV 颜色空间。

我们首先讨论了 HSV 颜色空间的基础知识以及颜色在此模型中的映射方式。还强调了与常用 RGB 模型的区别。

我们还演示了如何使用 opencv 将图像转换为 HSV。

HSV 颜色空间也用于对象跟踪。我们讨论了如何使用 opencv 库中的 inRange 函数使用给定颜色的上限和下限来检测给定图像中的颜色。

作者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

相关文章 - Python OpenCV