所谓的颜色目标检测,即根据物体的颜色来快速的进行目标定位,该算法的思路比较简单,但是却有很大的使用价值。
整个算法的实现步骤比较简单,具体的步骤如下所示:
# 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)
下图展示的是算法的输出结果,算法迭代着依次输出红色、蓝色、黄色和灰色的目标,满足了我们预期的要求。
该算法的思路和实现都很简单,效果也不错,不足之处是我们需要根据目标提前设置相应的lower和upper参数值,而这两个值严重的影响着该算法的性能,那么我们可不可以应用一种自动的方法来获得这两个值呢,使得整个算法变成全自动化的,这个问题留给大家自己去思考!!!
[1] 参考链接-参考链接
[1] 该博客是本人原创博客,如果您对该博客感兴趣,想要转载该博客,请与我联系(qq邮箱:[email protected]),我会在第一时间回复大家,谢谢大家的关注.
[2] 由于个人能力有限,该博客可能存在很多的问题,希望大家能够提出改进意见。
[3] 如果您在阅读本博客时遇到不理解的地方,希望您可以联系我,我会及时的回复您,和您交流想法和意见,谢谢。
[4] 本文测试的图片可以通过该链接进行下载。代码链接- 提取码:3orz。
[5] 本人业余时间承接各种本科毕设设计和各种小项目,包括图像处理(数据挖掘、机器学习、深度学习等)、matlab仿真、python算法及仿真等,有需要的请加QQ:1575262785详聊!!!