Python+Opencv根据颜色进行目标检测

目录

    • 一、什么是颜色目标检测?
    • 二、如何实现基于颜色的目标检测?
    • 三、算法代码实现
    • 四、算法运行流程
    • 五、效果展示与分析
    • 六、思维扩展
    • 参考资料
    • 注意事项

一、什么是颜色目标检测?

  所谓的颜色目标检测,即根据物体的颜色来快速的进行目标定位,该算法的思路比较简单,但是却有很大的使用价值。

二、如何实现基于颜色的目标检测?

  整个算法的实现步骤比较简单,具体的步骤如下所示:

  • 步骤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)

四、算法运行流程

  1. 打开一个cmd界面或者打开其它的工具;
  2. cd /d xxx 切换到代码路径,xxx表示代码的具体路径;
  3. python detect_color.py -i img1.png 执行代码;
  4. 依次按下Enter键来观察结果。

五、效果展示与分析

  下图展示的是算法的输出结果,算法迭代着依次输出红色、蓝色、黄色和灰色的目标,满足了我们预期的要求。
Python+Opencv根据颜色进行目标检测_第1张图片
Python+Opencv根据颜色进行目标检测_第2张图片

六、思维扩展

  该算法的思路和实现都很简单,效果也不错,不足之处是我们需要根据目标提前设置相应的lower和upper参数值,而这两个值严重的影响着该算法的性能,那么我们可不可以应用一种自动的方法来获得这两个值呢,使得整个算法变成全自动化的,这个问题留给大家自己去思考!!!

参考资料

[1] 参考链接-参考链接

注意事项

[1] 该博客是本人原创博客,如果您对该博客感兴趣,想要转载该博客,请与我联系(qq邮箱:[email protected]),我会在第一时间回复大家,谢谢大家的关注.
[2] 由于个人能力有限,该博客可能存在很多的问题,希望大家能够提出改进意见。
[3] 如果您在阅读本博客时遇到不理解的地方,希望您可以联系我,我会及时的回复您,和您交流想法和意见,谢谢。
[4] 本文测试的图片可以通过该链接进行下载。代码链接- 提取码:3orz。
[5] 本人业余时间承接各种本科毕设设计和各种小项目,包括图像处理(数据挖掘、机器学习、深度学习等)、matlab仿真、python算法及仿真等,有需要的请加QQ:1575262785详聊!!!

你可能感兴趣的:(opencv,python)