关于简单目标识别与意图分析的机器学习实战研究(颜色识别)
上一节我们说到要加强目标识别方法,怎么做到这点呢,我翻了翻 OpenCV 的官方文
档,发现除了模板匹配之外,颜色匹配是它的另一个目标识别方法,一般的思路是这样的:
首先使用 OpenCV 截取图像,然后将图像内 RGB 转换为 HSV 色彩空间进行判断,统计判断
HSV 和 RGB 的范围对应关系,最后输出 RGB 值
然后将目标图片进行处理,将 RGB 颜色转为 HSV;使用 cv2 中 inRange()函数过滤背景
颜色;将过滤后的颜色进行二值化处理,得到双色彩图片(其中有一种是我们目标的颜色);
再使用 dilate()函数对双色彩图片进行形态学腐蚀膨胀;最后统计白色区域面积。
这里为什么要将 RGB 转换成 HSV 色彩空间呢?
主要是因为 HSV 色彩空间可以提高识别的准确率,较 RGB 而言更适合于目标识别这一
领域,当前很多出色的颜色识别项目,都是在这个空间下进行的识别。这里我想到了一个增
加精度的方法,在测试前对目标图片做一次高斯模糊的效果会更好一些,实验也证明确实是
这样。下面就具体举一个例子,来看看颜色识别的效果吧,一言不合就上代码:
1. #coding:utf-8
2. import cv2 as cv
3. import numpy as np
4. import collections
5. import math
6. import ctypes,sys
7.
8. def getColorList():
9. dict = collections.defaultdict(list)
10.
11. # 黑色
12. lower_black = np.array([0, 0, 0])
13. upper_black = np.array([180, 255, 46])
14. color_list = []
15. color_list.append(lower_black)
16. color_list.append(upper_black)
17. dict['black'] = color_list
18.
19. # 白色
20. lower_white = np.array([0, 0, 221])
21. upper_white = np.array([180, 30, 255])
22. color_list = []
23. color_list.append(lower_white)
24. color_list.append(upper_white)
25. dict['white'] = color_list
26.
27. #红色
28. lower_red = np.array([156, 43, 46])
29. upper_red = np.array([180, 255, 255])
30. color_list = []
31. color_list.append(lower_red)