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()

  

猜你喜欢

转载自www.cnblogs.com/sweeeper/p/12059767.html