使用 Python 的 OpenCV 检测特定颜色(此处为蓝色)?
对于许多人来说,图像处理似乎是一项可怕而艰巨的任务,但它并不像许多人想象的那么难。在本教程中,我们将使用 Python 在 openCv 中进行基本的颜色检测。
颜色在计算机上如何工作?
我们通过颜色空间或颜色模型在计算机上表示颜色,这些颜色模型基本上将颜色范围描述为数字元组。
我们不会讨论每种颜色,而是讨论我们使用的最常见的颜色空间。即 RGB(红色、绿色、蓝色)和 HSV(色调、饱和度、值)。
RGB 基本上将颜色描述为三个组件的元组。每个分量可以取 0 到 255 之间的值,其中元组 (0, 0, 0) 表示黑色,而 (255, 255, 255) 表示白色。例如,如果我们要在屏幕上显示纯蓝色像素,则 R 值为 0,G 值为 0,B 值为 255。
以下是 RGB 颜色的更多示例:
颜色 | RGB 值 |
---|---|
红色 | 255, 0, 0 |
橙色 | 255, 128, 0 |
粉色 | 255, 153, 255 |
使用 HSV,像素也由 3 个参数表示,但它是色相、饱和度和值。然而,与 RGB 不同,HSV 不使用原色来表示像素。相反,它使用色相,即像素的颜色或阴影。
饱和度是颜色的强度,其中饱和度 0 表示 0,饱和度 255 表示最大强度。值会告诉您颜色有多亮或多暗。
检测正确的颜色
因此,让我们首先下载将要使用的图像,
现在我们已经获得了颜色图像,我们可以开始有趣的部分了。只需打开您最喜欢的 Python 文本编辑器或 IDE,我们就可以开始了。
import cv2 import numpy as np import imutils img = cv2.imread('color2.jpg')
在上面的代码行中,前两行处理所有导入。在第三行中,我导入了 imutils 模块,它有助于调整图像大小和查找颜色范围。在第 4 行中,我们打开了图像。
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
现在我们将图像转换为 hsv 图像,因为 hsv 有助于区分强度和颜色。
lower_range = np.array([110,50,50]) upper_range = np.array([130,255,255])
现在我们定义要检测的蓝色的上限和下限。要找到这些限制,我们可以使用 imutils 库中的范围检测器脚本。我们将这些值放入 NumPy 数组中。
mask = cv2.inRange(hsv, lower_range, upper_range)
这里我们实际上是用指定的蓝色创建一个蒙版。蒙版只是代表图像的特定部分。在本例中,我们正在检查 hsv 图像,并检查介于下限和上限之间的颜色。匹配的区域将图像设置为蒙版变量。
cv2.imshow('image', img) cv2.imshow('mask', mask) while(True): k = cv2.waitKey(5) & 0xFF if k == 27: break cv2.destroyAllWindows()
最后,我们可以并排显示原始图像和蒙版图像以查看差异。如果您想了解代码中的 0xFF 含义,请阅读此内容。然后,代码等待用户按下"Esc"键按钮将退出并销毁所有要清理的窗口。
最终程序
import cv2 import numpy as np import imutils img = cv2.imread('color2.jpg') hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) lower_range = np.array([110,50,50]) upper_range = np.array([130,255,255]) mask = cv2.inRange(hsv, lower_range, upper_range) cv2.imshow('image', img) cv2.imshow('mask', mask) while(True): k = cv2.waitKey(5) & 0xFF if k == 27: break cv2.destroyAllWindows()
输出
在上面,我们看到掩码中有几个黑点,这就是噪音。