根据HSV分量模型,提取红色的几种方法介绍

根据hsv分量模型,各种颜色范围分布如下:

红色的范围是:[0, 43, 46]~[10,255,255]∪[156, 43, 46]~[180,255,255]。

红色比较特殊,覆盖了多个范围,处理起来增加了不少难度,以下介绍两种方法去获取红色。

 

方法1:

import cv2
import numpy as np

def extract_red(pic):
    ''''method1:使用inRange方法,拼接mask0,mask1'''
    
    img = cv2.imdecode(np.fromfile(pic, dtype=np.uint8), -1)
    img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
    rows, cols, channels = img.shape
    # 区间1
    lower_red = np.array([0, 43, 46])
    upper_red = np.array([10, 255, 255])
    mask0 = cv2.inRange(img_hsv,lower_red,upper_red)
    # 区间2
    lower_red = np.array([156, 43, 46])
    upper_red = np.array([180, 255, 255])
    mask1 = cv2.inRange(img_hsv,lower_red,upper_red)
    # 拼接两个区间
    mask = mask0 + mask1
    # 保存图片
    cv2.imencode('.png', mask )[1].tofile(pic)

方法2:

from PIL import Image

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


def extract_red(fname):
    '''method2:遍历图片像素,把像素转化成hsv,根据hsv筛选出红色'''
    im = Image.open(fname)
    ## 懒加载模式
    pix = im.load()
    width = im.size[0]
    height = im.size[1]
    for x in range(width):
        for y in range(height):
            r, g, b = pix[x, y]
            h,s,v = rgb2hsv(r,g,b)
            if 0 < h < 10 or 156 < h < 180:
                pix[x, y] = 0,0,0
            else:
                pix[x, y] = 255,255,255
    im.save(fname)

 

  • 17
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
HSV颜色模型是一种描述颜色的模型,由色相(Hue)、饱和度(Saturation)和明度(Value)三个分量组成。 在HSV颜色模型中,色相(Hue)表示颜色的种类。色相的取值范围是0到360度,对应了色彩光谱中的不同颜色。例如,红色的色相是0度(或360度),绿色的色相是120度,蓝色的色相是240度等等。可以将色相看作是颜色在色彩光谱上的位置。 饱和度(Saturation)表示颜色的纯度或者说浓度。饱和度的取值范围是0到100%。当饱和度为0时,色彩是灰色的,而当饱和度为100%时,颜色是鲜艳饱和的。饱和度为50%的颜色则是介于灰色和鲜艳色之间。 明度(Value)表示颜色的亮度。明度的取值范围也是0到100%。当明度为0时,颜色完全黑暗,没有亮度。而当明度为100%时,颜色是最亮且最鲜明的。明度可以看作是颜色的亮度或者明暗程度。 根据HSV颜色模型,各种颜色的范围分布如下: - 色相:0度(或360度)对应红色,30度对应橙色,60度对应黄色,120度对应绿色,240度对应蓝色,300度对应紫色等等。 - 饱和度:0%对应灰色,100%对应饱和的颜色。 - 明度:0%对应黑色,100%对应亮丽的颜色。 通过调整HSV模型中的各个分量的取值,可以获得各种不同的颜色。例如,调整色相可以改变颜色的种类,调整饱和度可以改变颜色的纯度,调整明度可以改变颜色的亮度。HSV颜色模型因此在图形处理、计算机图形学以及颜色选择等领域具有广泛的应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值