openCV-python实现颜色识别

本文将介绍使用OpenCV实现颜色识别的详细步骤 + 代码。

背景介绍

在截取出模板匹配到的logo区域之后,需要判断logo是什么颜色。本案例中要识别的对象是纯色的所以适用下面的颜色识别方法,有不同需求的请斟酌借鉴。

原理介绍

数字图像处理中常用的采用模型是RGB(红,绿,蓝)模型和HSV(色调,饱和度,亮度),RGB广泛应用于彩色监视器和彩色视频摄像机,我们平时的图片一般都是RGB模型。相对于RGB空间,HSV空间能够非常直观的表达色彩的明暗,色调,以及鲜艳程度,方便进行颜色之间的对比。所以我们在颜色检测时,选用HSV图像。

例如主要区分2种颜色:蓝色和橘色

得到的阈值如下:

lower_blue = np.array([100, 43, 46])
upper_blue = np.array([124, 255, 255])
lower_orange = np.array([11, 43, 46])
upper_orange = np.array([25, 255, 255])

实现代码

颜色识别代码如下:

def recognize(frame):
    width = frame.shape[1]
    height = frame.shape[0]
    hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)

    # 根据阈值构建掩膜
    mask_blue = cv.inRange(hsv, lower_blue, upper_blue)
    mask_orange = cv.inRange(hsv, lower_orange, upper_orange)  

    # 对mask进行操作--黑白像素点统计  因为不同颜色的掩膜面积不一样
    # 记录黑白像素总和
    blue_white = 0
    blue_black = 0
    orange_white = 0
    orange_black = 0

    # 计算每一列的黑白像素总和
    for i in range(width):
        for j in range(height):
            if mask_blue[j][i] == 255:
                blue_white += 1
            if mask_blue[j][i] == 0:
                blue_black += 1
            if mask_orange[j][i] == 255:
                orange_white += 1
            if mask_orange[j][i] == 0:
                orange_black += 1

    color_list = ['blue', 'orange']
    num_list = [blue_white, orange_white]
    ret = color_list[num_list.index(max(num_list))]
    return ret

调用上面的函数就可以输出当前识别到的颜色标签。

缺点是识别的颜色越多代码计算量越大,效率低。

参考链接:https://blog.csdn.net/Aiden_yan/article/details/118459034opencv-python车牌颜色判断》-三个臭皮姜

猜你喜欢

转载自blog.csdn.net/weixin_43737866/article/details/129386344