使用OpenCV和Python检测特定颜色(此处为蓝色)?

Detection of a specific color(blue here) using OpenCV with Python?

对于许多人来说,图像处理可能看起来像是一个令人恐惧和艰巨的任务,但并不像许多人想象的那么难。在本教程中,我们将使用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,我们就可以开始。

1
2
3
4
import cv2
import numpy as np
import imutils
img = cv2.imread('color2.jpg')

在上面的代码行中,前两行处理所有导入。在第三行中,我导入了imutils模块,该模块有助于调整图像大小并查找颜色范围。在第4行中,我们打开了图像。

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

现在,我们将图像转换为hsv图像,因为hsv有助于区分强度和颜色。

1
2
lower_range = np.array([110,50,50])
upper_range = np.array([130,255,255])

现在,我们定义要检测的蓝色的上限和下限。要找到这些限制,我们可以使用imutils库中的range-detector脚本。我们将这些值放入NumPy数组中。

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

在这里,我们实际上是使用指定的蓝色创建蒙版。遮罩仅代表图像的特定部分。在这种情况下,我们将检查hsv图像,并检查上下限之间的颜色。匹配的区域将图像设置为mask变量。

1
2
3
4
5
6
7
8
9
cv2.imshow('image', img)
cv2.imshow('mask', mask)

while(True):
 k = cv2.waitKey(5) & 0xFF
 if k == 27:
   break

cv2.destroyAllWindows()

最后,我们可以并排显示原始图像和蒙版图像,以查看区别。如果您想了解0xFF在代码中的含义,请阅读此内容。然后,代码等待用户点击" Esc"按钮,将其退出并销毁所有要清除的窗口。

最终程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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()

输出量

在上面,我们看到蒙版中有几个黑点,即噪音。