OpenCV和Python颜色检测(P1)
在本文中,我将向您展示如何使用OpenCV和Python执行颜色检测。
OpenCV和Python颜色检测
让我们开始吧。
打开你最喜欢的python编辑器,创建一个名为 q的文件:
我们将从第3-5行导入必要的包开始。我们将使用NumPy进行数值处理,使用argparse解析命令行参数,使用CV2进行OpenCV绑定。
第8-10行处理命令行参数的解析。我们只需要一个开关,即映像,它是指向映像驻留在磁盘上的路径。
然后,在第13行,我们从磁盘上加载图像。
现在,有趣的部分来了。
我们希望能够检测图像中的每个Game Boy盒带。这意味着我们必须识别图像中的红色、蓝色、黄色和灰色。
让我们继续定义以下颜色列表:
我们在这里所做的只是在RGB颜色空间中定义一个边界列表(或者更确切地说,BGR,因为OpenCV以相反的顺序将图像表示为NumPy数组),其中列表中的每个条目都是一个具有两个值的元组:一个下限列表和一个上限列表。
例如,让我们看看元组([17,15100],[50,56200])。
这里,我们的意思是,图像中R>=100、B>=15和G>=17以及R<=200、B<=56和G<=50的所有像素都将被视为红色。
现在我们有了边界列表,我们可以使用CV2。inRange函数执行实际颜色检测。
我们来看看:
我们开始在第24行的上限和下限上循环,然后在第26行和第27行将上限和下限转换为NumPy数组。这两行代码似乎可以省略,但在使用OpenCV Python绑定时,OpenCV希望这些限制是NumPy数组。此外,由于这些是在[0,256]范围内的像素值,我们可以使用无符号8位整数数据类型。
要使用OpenCV执行实际的颜色检测,请查看第31行,其中使用了CV2。inRange函数。
CV2.inRange函数需要三个参数:第一个参数是我们要执行颜色检测的图像,第二个参数是要检测的颜色的下限,第三个参数是要检测的颜色的上限。
打了CV2之后。在range中,返回一个二进制掩码,其中白色像素(255)表示落入上限和下限范围的像素,而黑色像素(0)则不属于上限和下限范围。
注意:我们正在RGB颜色空间中执行颜色检测。但你也可以在HSV或L*a*b*颜色空间中轻松实现。您只需根据各自的颜色空间调整上限和下限。
为了创建输出图像,我们在第32行应用遮罩。这个呼叫只会呼叫CV2.bitwise_and,仅显示图像中遮罩中具有相应白色(255)值的像素。
最后,我们的输出图像显示在第35行和第36行。
不错。只有36行代码,其中绝大多数是导入、参数解析和注释。
让我们继续运行我们的脚本:
(这就等待下一篇的内容吧,以下为原文的链接:
https://www.pyimagesearch.com/2014/08/04/opencv-python-color-detection/)