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颜色的更多示例:
颜色 th> | RGB值 th> |
---|---|
红色 | 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() |
输出量
在上面,我们看到蒙版中有几个黑点,即噪音。