OpenCV 检测颜色
![OpenCV 检测颜色](/img/Python/feature-image---opencv-inrange.webp)
本教程将讨论在 Python 中使用 OpenCV 的 inRange()
函数检测图像中的颜色。
在 Python 中使用 OpenCV 的 inRange()
函数检测图像上的颜色
我们可以使用 OpenCV 的 inRange()
函数检测和提取图像中存在的颜色。有时,出于某种原因,我们想从图像中删除或提取颜色。
我们可以使用 OpenCV 的 inRange()
函数来创建颜色掩码,或者换句话说,我们可以使用该颜色的范围来检测颜色。颜色以 RGB 三元组值格式存储在彩色图像中。
要创建它的蒙版,我们必须使用该颜色的明暗版本的 RGB 三元组值。例如,在 BRG 图像中,如果我们要提取红色,我们可以使用 (0,0,50) 表示浅红色,使用 (255,50,50) 表示深红色来创建红色蒙版.
我们可以传递图像和上下 BRG 值来创建蒙版。
例如,让我们读取包含一些不同颜色的圆圈的图像,并创建一个红色蒙版和一个绿色蒙版。请参阅下面的代码。
import cv2
img = cv2.imread("download.png")
# mask of red color
mask1 = cv2.inRange(img, (0, 0, 50), (50, 50, 255))
# mask of blue color
mask2 = cv2.inRange(img, (50, 0, 0), (255, 50, 50))
cv2.imshow("Original Image", img)
cv2.imshow("mask red color", mask1)
cv2.imshow("mask blue color", mask2)
cv2.waitKey(0)
输出:
我们可以将这两个蒙版与原始图像进行比较,以了解它们是否包含正确的颜色。我们可以看到掩码一在红色之上,而掩码二在蓝色之上。
inRange()
函数创建一个与原始图像相似的新二值图像。如你所见,蒙版图像中只有白色和黑色两种颜色。
inRange()
函数将颜色的值设置为 1,如果颜色存在于给定的颜色范围内,则设置为白色,如果颜色不存在于指定的颜色范围内,则设置为 0。上图采用 BRG 色标。
这就是我们在 inRange()
函数中使用 BRG 值的原因,但我们也可以将图像转换为其他色标,例如 HSV,在这种情况下,我们将使用 HSV 标度值来创建蒙版。现在让我们从图像中提取红色和蓝色。
要提取这两种颜色,我们必须使用 OpenCV 的 bitwise_or()
函数将两个蒙版组合起来以创建一个蒙版。之后,我们可以使用 OpenCV 的 bitwise_and()
函数从图像中提取颜色,使用图像作为第一个和第二个参数,掩码作为第三个参数。
请参阅下面的代码。
import cv2
img = cv2.imread("download.png")
# mask of red color
mask1 = cv2.inRange(img, (0, 0, 50), (50, 50, 255))
# mask of blue color
mask2 = cv2.inRange(img, (50, 0, 0), (255, 50, 50))
# final mask
mask = cv2.bitwise_or(mask1, mask2)
target = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow("Original Image", img)
cv2.imshow("mask red color", mask1)
cv2.imshow("mask blue color", mask2)
cv2.imshow("mask of both colors", mask)
cv2.imshow("target colors extracted", target)
cv2.waitKey(0)
输出:
从给定的图像中成功提取了红色和蓝色,如上一张图像所示。要将一种颜色空间转换为另一种颜色空间,我们可以使用 OpenCV 的 cvtColor()
函数。
如果我们有一张带有 HSV 颜色空间的图像,我们必须使用 HSV 值来创建蒙版。在 HSV 中,颜色具有定义颜色的三个值 Hue、Saturation 和 Value。
相关文章 - Python OpenCV
- OpenCV sobel() 函数
- Python 中 OpenCV 的 GUI 特性
- 在 Python 中使用 OpenCV 创建二维码扫描器
- 在 Python 中使用 OpenCV 的 HSV 颜色空间
- OpenCV 中的模糊滤镜
- 使用 OpenCV 进行对象跟踪