这一内容要介绍的颜色识别算法和上面所介绍的颜色分割是不一样的概念,颜色分割更重于归类颜色,通过去掉大量颜色来提取单一颜色值做判断,为分割图像服务。
4.4.7.1 黑色特征物体检测
使用findBlobs()函数很容易在深色背景颜色下寻找颜色特征物体,如果使用二值化图像,可以根据像素检测到用户感兴趣的对象,但是如果用户感兴趣的特征是在浅色背景下寻找深色物体呢?在这种情况下,可以使用invert()函数进行反选。下面的例子演示了如何寻找象棋子,如图4.4.26所示。其检测结果如图4.4.27所示。
图4.4.26 黑色棋子
from Simple CV import Image
img = Image("chessmen.png")
inv Img = img.invert() ①
blobs = inv Img.find Blobs()②
blobs.show(width=2)
img.add Drawing Layer(inv Img.dl())
img.show()
① invert()函数使黑色棋子变成白色,使白色的背景变成黑色。
② 使用findBlobs()函数可以找到浅色的特征物体。
图4.4.27 检测结果
(a)原始图像;(b)反向操作特征物体;(c)在原始图像上显示特征物体
4.4.7.2 特定颜色斑点检测
这个世界不只包括简单的明亮与黑暗对象,在许多情况下,物体实际上具有的颜色要比它表面表现的亮度和暗度更加重要。下面的例子演示了如何识别蓝色的糖果,如图4.4.28所示。
寻找蓝色糖果需要使用上面介绍的colorDistance()函数和其他相关知识。
from Simple CV import Color, Image
img = Image("mandms.png")
blue_distance = img.color Distance(Color.BLUE).invert()
blobs = blue_distance.find Blobs()
blobs.draw(color=Color.PUCE, width=3)
blue_distance.show()
img.add Drawing Layer(blue_distance.dl())
img.show()
图4.4.28 大家所熟知的糖果
运行程序结果匹配的蓝色糖果如图4.4.29所示。
图4.4.29 匹配结果
(a)原始图像;(b)判断距离蓝色目标值的灰度图,越白色的地方表示离蓝色越接近; (c)在原始图像上识别的蓝色特征物体
有时,照明条件可以使颜色检测更为困难。为了说明问题,图4.4.30所示为基于原始图像的糖果图像,但图像的右边部分变暗。使用hueDistance()函数是此类情况的更好的解决方式。例如,如果照片看起来如上所述,其右半部分变暗,使用colorDistance()函数的处理效果并不好。图像的右半边部分是故意被变暗的,下面的例子是依据颜色判断特征物体,它提供了一个比在 RGB 模式下更好的方式,这个方式更加具有实用性,因为照明条件可能发生变化,这样才能保证其稳定工作。
图4.4.30 图像右半边部分变暗
为了说明这个问题,先来运行一下前面介绍的代码,如图4.4.31所示:
from Simple CV import Color, Image
img = Image("mandms.png")
blue_distance = img.color Distance(Color.BLUE).invert()
blobs = blue_distance.find Blobs()
blobs.draw(color=Color.PUCE, width=3)
blue_distance.show()
img.add Drawing Layer(blue_distance.dl())
img.show()
图4.4.31 图像的右半边没有判断出来
要解决此问题,要使用hueDistance()函数而不是colorDistance()函数。使用色度加强,在光线变化时,漆黑的右半部分的图像才不会产生问题:
from Simple CV import Color, Image
img = Image("mandms-dark.png")
blue_distance = img.hue Distance(Color.BLUE).invert()
blobs = blue_distance.find Blobs()
blobs.draw(color=Color.PUCE, width=3)
img.add Drawing Layer(blue_distance.dl())
img.show()
这个例子使用的是hueDistance()函数而不是colorDistance()函数,请注意,在这样的情况下会产生更好的运行效果,如图4.4.32所示。
图4.4.32 使用hueDistance()函数的特征物体检测
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。