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

      

  • 相关阅读:
    空气墙的制作,标签的添加
    子弹朝向问题的解决,移动方法的编写
    子弹的朝向问题
    坦克的攻击方法
    移动优先级的添加,2D渲染层级问题
    碰撞器的添加,解决抖动问题
    控制图片的移动切换
    控制玩家的移动
    游戏中预制体的制作,2D动画的制作
    场景搭建,素材的处理
  • 原文地址:https://www.cnblogs.com/sweeeper/p/12059767.html
Copyright © 2011-2022 走看看