OpenCV识别图像中的颜色

OpenCV识别图像中的颜色

利用OpenCV识别图像中区域的颜色
效果如图所示:
在这里插入图片描述
代码中需要读取的图像RGB对照表:
在这里插入图片描述
代码中所需读取的BGR对照表在此下载:图像RBG对照表

import cv2
import pandas as pd

img_path = "./rgb_pic/color.jpg"
img = cv2.imread(img_path)
clicked = False
r = g = b = xpos = ypos = 0
index = ['color', 'color_name', 'hex', 'R', 'G', 'B']
csv = pd.read_csv('colors.csv', names=index, header=None)
print(type(csv))


def draw(event, x, y, flags, parm):
    if event == cv2.EVENT_LBUTTONDBLCLK:  # 鼠标左击
        global b, g, r, xpos, ypos, clicked
        clicked = True
        xpos = x
        ypos = y
        b, g, r = img[y, x]
        b = int(b)
        g = int(g)
        r = int(r)
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw)  # 鼠标事件响应

def getColorName(R, G, B):
    minimum = 10000
    for i in range(len(csv)):
        d = abs(R - int(csv.loc[i, "R"])) + abs(G - int(csv.loc[i, "G"])) + abs(B - int(csv.loc[i, "B"]))
        if (d <= minimum):
            minimum = d
            cname = csv.loc[i, 'color_name']
    return cname


if __name__ == '__main__':
    while (True):
        cv2.imshow('image', img)
        if (clicked):
            cv2.rectangle(img, (20, 20), (350, 60), (b, g, r), -1)
            text = getColorName(r, g, b) + "R=" + str(r) + "G=" + str(g) + "B=" + str(b)
            cv2.putText(img, text, (50, 50), 2, 0.5, (255, 255, 255), 1, cv2.LINE_AA)
            if (r + g + b >= 600):
                cv2.putText(img, text, (50, 50), 2, 0.8, (0, 0, 0), cv2.LINE_AA)
            clicked = False
        if cv2.waitKey(20) & 0xFF == 27:
            break




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值