一、什么是颜色目标检测?
所谓的颜色目标检测,即根据物体的颜色来快速的进行目标定位,该算法的思路比较简单,但是却有很大的使用价值。
二、如何实现基于颜色的目标检测?
整个算法的实现步骤比较简单,具体的步骤如下所示:
- 步骤1-根据图片中的目标设定合适的lower和upper阈值;
- 步骤2-使用cv2.inRange(img,lower, upper)函数来进行阈值化操作,其中lower和upper就是我们所设定的阈值;
- 步骤3-使用cv2.bitwise_and()函数进行与操作,即选择出合适的目标;
三、算法代码实现
# coding=utf-8
# 导入python包
import numpy as np
import argparse
import imageio
import cv2
# 设置并解析参数
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", help = "path to the image")
args = vars(ap.parse_args())
# 读取图片
image = cv2.imread(args["image"])
# 定义边界列表 (lower[r, g, b], upper[r, g, b])
boundaries = [ ([17, 15, 100], [50, 56, 200]), ([86, 31, 4], [220, 88, 50]), ([25, 146, 190], [62, 174, 250]), ([103, 86, 65], [145, 133, 128])]
img_mask = []
# 循环遍历所有的边界
for (lower, upper) in boundaries:
# 创建上边界和下边界
lower = np.array(lower, dtype = "uint8")
upper = np.array(upper, dtype = "uint8")
# 在指定边界内查找颜色并应用掩码
mask = cv2.inRange(image, lower, upper)
# 进行与操作
output = cv2.bitwise_and(image, image, mask = mask); img_mask.append(output)
# 显示结果
cv2.imshow("images", np.hstack([image, output]))
cv2.waitKey(0)
imageio.mimsave("mask.gif", img_mask)
四、算法运行流程
- 打开一个cmd界面或者打开其它的工具;
- cd /d xxx 切换到代码路径,xxx表示代码的具体路径;
- python detect_color.py -i img1.png 执行代码;
- 依次按下Enter键来观察结果。
五、效果展示与分析
下图展示的是算法的输出结果,算法迭代着依次输出红色、蓝色、黄色和灰色的目标,满足了我们预期的要求。
六、思维扩展
该算法的思路和实现都很简单,效果也不错,不足之处是我们需要根据目标提前设置相应的lower和upper参数值,而这两个值严重的影响着该算法的性能,那么我们可不可以应用一种自动的方法来获得这两个值呢,使得整个算法变成全自动化的,这个问题留给大家自己去思考!!!
参考资料
[1] 参考链接-参考链接
注意事项
[1] 如果您对AI、自动驾驶、AR、ChatGPT等技术感兴趣,欢迎关注我的微信公众号“AI产品汇”,有问题可以在公众号中私聊我!
[2] 该博客是本人原创博客,如果您对该博客感兴趣,想要转载该博客,请与我联系(qq邮箱:1575262785@qq.com),我会在第一时间回复大家,谢谢大家的关注.
[3] 由于个人能力有限,该博客可能存在很多的问题,希望大家能够提出改进意见。
[4] 如果您在阅读本博客时遇到不理解的地方,希望您可以联系我,我会及时的回复您,和您交流想法和意见,谢谢。
[5] 本文测试的图片可以通过关注微信公众号AI产品汇之后找我索取!
[6] 本人业余时间承接各种本科毕设设计和各种小项目,包括图像处理(数据挖掘、机器学习、深度学习等)、matlab仿真、python算法及仿真等,有需要的请加QQ:1575262785详聊!!!