opencv颜色识别(HSV)

opencv颜色识别(hsv)

hsv

即色相、饱和度、明度(英语:Hue, Saturation, Value)

  1. 色相(H)是色彩的基本属性,就是平常所说的颜色名称,如红色、黄色等。
  2. 饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。
  3. 明度(V),亮度(L),取0-100%。

在这里插入图片描述

使用的到的相关工具

  1. cv2.createTrackbar(str1,str2,num1,num2,func):创建滑动条 str1:滑动条名称、str2:滑动条窗口名称、num1,num2:滑动条上下阈值、func:滑动滑动条时调用的函数
  2. cv2.getTrackbarPos(str1,str2):获取滑动条数值 str1:滑动条名称、str2:滑动条窗口名称
  3. cv2.inRange(imgHSV, Lower, Upper):保留imgHSV列表中在lower和upper之间的值,并置为255,其余数置零
  4. img_mask =cv2.bitwise_and(img,img,mask=mask):数值相与,在img(原图像上加掩膜),赋值给img_mask
  5. all_img_mask = np.vstack([white_array, img,img_mask]):将size相同,颜色通道数相同的图像拼接起来
  6. cv2.putText(all_img_mask, str(white_mask)[0:6], (0, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 2):在图像上写字

测试代码


import numpy as np
import cv2

def val(x):
    global Lower, Upper
    #获取滑动条的数值
    l_h = cv2.getTrackbarPos("LowH", "control")
    h_h = cv2.getTrackbarPos("highH", "control")
    l_s = cv2.getTrackbarPos("LowS", "control")
    h_s = cv2.getTrackbarPos("highS", "control")
    l_v = cv2.getTrackbarPos("LowV", "control")
    h_v = cv2.getTrackbarPos("highV", "control")
    Lower = np.array([l_h, l_s, l_v])  # 要识别颜色的下限
    Upper = np.array([h_h, h_s, h_v])  # 要识别的颜色的上限



def color_(img):
    imgHSV = cv2.cvtColor(img , cv2.COLOR_BGR2HSV)
    #创建滑动条
    cv2.namedWindow("control")
    cv2.resizeWindow("control",640,240)
    cv2.createTrackbar("LowH", "control", 0, 179, val)
    cv2.createTrackbar("highH", "control", 179, 179, val)
    cv2.createTrackbar("LowS", "control", 0, 255, val)
    cv2.createTrackbar("highS", "control", 255, 255, val)
    cv2.createTrackbar("LowV", "control", 0, 255, val)
    cv2.createTrackbar("highV", "control", 255, 255, val)


    while True:
        mask = cv2.inRange(imgHSV, Lower, Upper)
        # mask是把HSV图片中在颜色范围内的区域变成白色,其他区域变成黑色
        white_mask = np.average(mask)
        white_mask = white_mask / 255 * 100
        # white_mask是该色域在区域中的占比值
        img_mask = cv2.bitwise_and(img,img,mask=mask)
        # img_mask获得原图中的指定颜色图像
        all_img_mask = np.vstack([white_array, img, img_mask])
        # all_img_mask将所有的图像拼接起来
        cv2.putText(all_img_mask, str(white_mask)[0:6], (0, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 2)
        cv2.imshow("test", all_img_mask)
        if cv2.waitKey(1) == ord('q'):
            cv2.destroyAllWindows()
            break


if __name__ == '__main__':
    Lower = np.array([0, 0, 0])  # 要识别颜色的下限
    Upper = np.array([179, 255, 255])  # 要识别的颜色的上限
    white_array = np.zeros((50,200,3),np.uint8)
    white_array.fill(255)
    path = "E:\\color_test.jpg"
    img = cv2.imread(path)
    img = cv2.resize(img,(200,200))
    color_(img)

测试图

全hsv域
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 8
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值