zoukankan      html  css  js  c++  java
  • python实现RGB转换HSV

    def rgb2hsv(r, g, b):
        r, g, b = r/255.0, g/255.0, b/255.0
        mx = max(r, g, b)
        mn = min(r, g, b)
        m = mx-mn
        if mx == mn:
            h = 0
        elif mx == r:
            if g >= b:
                h = ((g-b)/m)*60
            else:
                h = ((g-b)/m)*60 + 360
        elif mx == g:
            h = ((b-r)/m)*60 + 120
        elif mx == b:
            h = ((r-g)/m)*60 + 240
        if mx == 0:
            s = 0
        else:
            s = m/mx
        v = mx
        H = h / 2
        S = s * 255.0
        V = v * 255.0
        return H, S, V

     

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    import math
    cap=cv2.VideoCapture(0)
    #rgb颜色转化为对应的hsv颜色
    if not cap.isOpened():
        print('摄像头打开失败')
    else:
        print('摄像头打开成功')
    def rgb2hsv(r, g, b):
        r, g, b = r/255.0, g/255.0, b/255.0
        mx = max(r, g, b)
        mn = min(r, g, b)
        m = mx-mn
        if mx == mn:
            h = 0
        elif mx == r:
            if g >= b:
                h = ((g-b)/m)*60
            else:
                h = ((g-b)/m)*60 + 360
        elif mx == g:
            h = ((b-r)/m)*60 + 120
        elif mx == b:
            h = ((r-g)/m)*60 + 240
        if mx == 0:
            s = 0
        else:
            s = m/mx
        v = mx
        H = h / 2
        S = s * 255.0
        V = v * 255.0
        return H, S, V
    # lower_red=np.array([0,43,46])
    # upper_red=np.array([15,255,255]) 
    lower_red = np.array(rgb2hsv(146,128,128),dtype=np.int32)
    
    upper_red = np.array(rgb2hsv(127,133,156),dtype=np.int32)
    while(1):
        ret,frame=cap.read() 
        hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
        
        #根据阈值构建掩模
        mask=cv2.inRange(hsv,lower_red,upper_red)
        #对图像和掩模进行位运算
        res=cv2.bitwise_and(frame,frame,mask=mask)
        cv2.imshow('iframe',frame)
        cv2.imshow('mask',mask)
        cv2.imshow('res',res)
        k=cv2.waitKey(1)&0xFF
        if k==27:
            break
            cv2.destroyAllWindows()
    

      

  • 相关阅读:
    jenkins 分布式部署
    Jenkins2.138配置slave节点时,启动方法只有两个选项
    SIFT特征详解
    OpenCV,计算两幅图像的单应矩阵
    OpenGL新手框架
    OpenGL超级宝典visual studio 2013开发环境配置,GLTools
    归一化变换 Normalizing transformations
    OpenCV2:特征匹配及其优化
    OpenCV2简单的特征匹配
    Qt自适应大小显示图片,添加菜单
  • 原文地址:https://www.cnblogs.com/sweeeper/p/12059767.html
Copyright © 2011-2022 走看看