zoukankan      html  css  js  c++  java
  • 形状识别标签类-LAB空间

     1 #实现颜色识别与标记
     2 #实现原理:LAB颜色空间与欧几里得距离
     3 
     4 from scipy.spatial import distance as dist
     5 from collections import OrderedDict
     6 import numpy as np
     7 import cv2
     8 
     9 class ColorLabeler:
    10     def __init__(self):
    11         #初始化颜色词典
    12         colors = OrderedDict({
    13             "红色":(255, 0, 0),
    14             "绿色":(0, 255, 0),
    15             "蓝色":(0, 0, 255),
    16             "黑色":(0, 0, 0),
    17             "白色":(255, 255, 255) })
    18 
    19         #初始化属性(变量)
    20         #为lab图像分配空间
    21         #为颜色分配列表
    22         self.lab = np.zeros((len(colors), 1, 3), dtype="uint8")
    23         self.colorName =[]
    24 
    25         #枚举,以词典长度为循环次数-->更新数字阵列与色名列表
    26         #将rgb值赋予lab空间
    27         #将name变量的值一次次加入列表中(此处name还未分配值)
    28         for(i, (name, rgb)) in enumerate(colors.items()):
    29             self.lab[i] = rgb
    30             self.colorName.append(name)
    31 
    32         #颜色空间转换
    33         self.lab = cv2.cvtColor(self.lab,cv2.COLOR_RGB2LAB)
    34 # 为什么选择LAB空间?-->其中与欧几里得距离的关系帮助我们标记颜色
    35 
    36 # 将选择最小化欧几里德距离的已知颜色作为颜色标识。
    37     def label(self, image, c):
    38         #标志mask,绘制轮廓 shape属性用来查看图像结构,返回行和列
    39         mask = np.zeros(image.shape[:2], dtype="uint8")
    40         cv2.drawContours(mask, [c], -1, 255, -1)
    41         mask = cv2.erode(mask, None, iterations=2)#腐蚀
    42         mean = cv2.mean(image, mask=mask)[:3]#均值
    43 
    44         #初始化最小距离
    45         minDist = (np.inf, None)#np.inf表示无穷大的正数
    46 
    47         # 遍历已知的LAB颜色值
    48         for (i, row) in enumerate(self.lab):
    49             # 计算当前l*a*b*颜色值与图像平均值之间的距离
    50             d = dist.euclidean(row[0], mean)
    51 
    52             # 如果当前的距离小于最小的距离,则进行变量更新
    53             if d < minDist[0]:
    54                 minDist = (d, i)
    55 
    56         # 返回最小距离对应的颜色值
    57         return self.colorNames[minDist[1]]

     效果图:

  • 相关阅读:
    Activity生命周期回顾
    Android Camera拍照 压缩
    Android获取相册图片
    Android 常用系统控件
    Java synchronized详解
    Android输入法开发
    Android Toast和Notification
    Extjs 自定义控件
    在Extjs中动态增加控件
    数据库中存储js代码无法json解析
  • 原文地址:https://www.cnblogs.com/isadoraytwwt/p/15024097.html
Copyright © 2011-2022 走看看