当前位置:   article > 正文

python颜色识别demo_import colorlist

import colorlist

一般对颜色空间的图像进行有效处理都是在HSV空间进行的,然后对于基本色中对应的HSV分量需要给定一个严格的范围,下面是通过实验计算的模糊范围(准确的范围在网上都没有给出)。

H: 0 — 180

S: 0 — 255

V: 0 — 255

此处把部分红色归为紫色范围(颜色阈值可以尝试调整,调到最佳):

定义颜色阈值代码如下:

  1. # -*- coding: utf-8 -*-
  2. # @Time : 2021/12/28 17:07
  3. # @Author : ZY
  4. # @Site :
  5. # @File : colorList.py
  6. # @Software: PyCharm
  7. import numpy as np
  8. import collections
  9. # 定义字典存放颜色分量上下限
  10. # 例如:{颜色: [min分量, max分量]}
  11. # {'red': [array([160, 43, 46]), array([179, 255, 255])]}
  12. def getColorList():
  13. dict = collections.defaultdict(list)
  14. # 黑色
  15. lower_black = np.array([0, 0,0])
  16. upper_black = np.array([180,255,46])
  17. color_list = []
  18. color_list.append(lower_black)
  19. color_list.append(upper_black)
  20. dict['黑'] = color_list
  21. # #绿色
  22. lower_gray = np.array([35, 43, 46])
  23. upper_gray = np.array([77, 255, 255])
  24. color_list = []
  25. color_list.append(lower_gray)
  26. color_list.append(upper_gray)
  27. dict["绿"]=color_list
  28. # #黄
  29. lower_gray = np.array([26, 43, 46])
  30. upper_gray = np.array([34, 255, 255])
  31. color_list = []
  32. color_list.append(lower_gray)
  33. color_list.append(upper_gray)
  34. dict["黄"] = color_list
  35. # 紫色
  36. lower_purple = np.array([125, 43, 46])
  37. upper_purple = np.array([180, 255, 255])
  38. color_list = []
  39. color_list.append(lower_purple)
  40. color_list.append(upper_purple)
  41. dict['紫'] = color_list
  42. return dict
  43. if __name__ == '__main__':
  44. color_dict = getColorList()
  45. print(color_dict)
  46. num = len(color_dict)
  47. print('num=', num)
  48. for d in color_dict:
  49. print('key=', d)
  50. print('value=', color_dict[d][1])
'
运行

 这是一个单独的colorList.py文件,通过导入py文件调用即可

在所需要的地方定义好函数,如get_color(frame)函数,我所定义如下代码:

  1. import colorList #首先导入刚写好的colorList.py文件
  2. def get_color(frame):
  3. # print('go in get_color')
  4. hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
  5. maxsum = -100
  6. color = None
  7. color_dict = colorList.getColorList()
  8. for d in color_dict:
  9. mask = cv2.inRange(hsv, color_dict[d][0], color_dict[d][1])
  10. # cv2.imwrite(d + '.jpg', mask)
  11. binary = cv2.threshold(mask, 127, 255, cv2.THRESH_BINARY)[1]
  12. binary = cv2.dilate(binary, None, iterations=2)
  13. cnts, hiera = cv2.findContours(binary.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
  14. sum = 0
  15. for c in cnts:
  16. sum += cv2.contourArea(c)
  17. if sum > maxsum:
  18. maxsum = sum
  19. color = d
  20. return color

在主函数中首先读取你所识别的照片,然后调用定义,进行识别图片颜色,具体代码如下:

  1. photo = cv2.imread("screen.png")
  2. Color = get_color(photo)
  3. print(Color)

输出结果为

别的颜色经测试也可以正常识别。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/836874
推荐阅读
相关标签
  

闽ICP备14008679号