【FPGA图像处理实战】- RGB与HSV互转-FPGA常见问题社区-FPGA CPLD-ChipDebug

【FPGA图像处理实战】- RGB与HSV互转

 

HSV颜色空间也是图像处理中常用一个颜色空间,主要应用于调色处理。 本文将介绍一下RGB与HSV互转,其中复杂度比“RGB与YUV互转”要高一点,涉及到除法、浮点数、有符号数的运算。

一、HSV颜色空间介绍

1、HSV颜色空间

HSV(Hue, Saturation, Value)颜色模型,也称作六角锥体模型(Hexcone Model),是A. R. Smith于1978年根据颜色的直观特性创建的一种颜色空间。   这种模型以色调(Hue)、饱和度(Saturation)和亮度(Value)为基础,能够更加自然地表示和处理颜色,因而在计算机视觉、图像处理等领域得到了广泛应用。   图片[1]-【FPGA图像处理实战】- RGB与HSV互转-FPGA常见问题社区-FPGA CPLD-ChipDebug

2、色调(Hue)

H(Hue)代表色调,是描述颜色的一种属性,用来表示颜色的种类。色调是人在视觉上区分颜色的一种方式,类似于RGB模型中的红、绿、蓝等基本颜色。 HSV模型中的色调H,通常以角度来表示,范围从0度(红色)到120度(蓝色),再到240度(洋红色),再到360度(再次回到红色)。 这种循环对应了色轮上颜色的分布。不同的色调对应着色轮上不同的颜色,例如: – 0度到120度:从红色逐渐过渡到蓝色 – 120度到240度:从蓝色逐渐过渡到洋红色 – 240度到360度:从洋红色逐渐过渡到红色 在HSV模型中,色调H在数值上是对饱和度和亮度进行加权的,即在保持饱和度和亮度不变的情况下,调整色调可以得到不同颜色。色调H的变化会影响到颜色的外观,使得颜色在色轮上沿着指定的方向移动。 总的来说,HSV模型中的色调H是一种描述颜色种类的属性,它能够帮助我们区分不同的颜色,并在颜色处理和计算机视觉等领域中发挥重要作用。 图片[2]-【FPGA图像处理实战】- RGB与HSV互转-FPGA常见问题社区-FPGA CPLD-ChipDebug

3、饱和度(Saturation)

S(Saturation)代表饱和度,它是描述颜色的一种属性,用来表示颜色的纯净度和鲜艳程度。 饱和度S表示颜色的纯净度,即颜色的鲜明程度。当饱和度S为1时,表示颜色完全饱和,即颜色是最纯净、最鲜明的;而当饱和度S为0时,表示颜色完全去饱和,即颜色变为灰度,没有鲜明的色彩。 在HSV模型中,饱和度S的取值范围通常是0到1,其中: – 0:表示颜色完全去饱和,即颜色变为灰度,没有鲜明的色彩。 – 1:表示颜色完全饱和,即颜色是最纯净、最鲜明的。 饱和度S的变化会影响到颜色的外观,使得颜色变得更加鲜艳或者更加柔和。当饱和度增加时,颜色变得更加鲜艳;而当饱和度减小时,颜色变得更加柔和,甚至变为灰度。 总的来说,HSV模型中的饱和度S是一种描述颜色纯净度和鲜艳程度的属性,它能够帮助我们调整颜色的鲜明程度,并在颜色处理和计算机视觉等领域中发挥重要作用。 图片[3]-【FPGA图像处理实战】- RGB与HSV互转-FPGA常见问题社区-FPGA CPLD-ChipDebug

4、亮度(Value)

V(Value)代表亮度,它是描述颜色的一种属性,用来表示颜色的明暗程度。 亮度V表示颜色的明暗程度,即颜色的亮丽程度。当亮度V为1时,表示颜色完全亮丽,即颜色是最明亮的;而当亮度V为0时,表示颜色完全暗淡,即颜色变为黑色。 在HSV模型中,亮度V的取值范围通常是0到1,其中: – 0:表示颜色完全暗淡,即颜色变为黑色。 – 1:表示颜色完全亮丽,即颜色是最明亮的。 亮度V的变化会影响到颜色的外观,使得颜色变得更加明亮或者更加暗淡。当亮度增加时,颜色变得更加明亮;而当亮度减小时,颜色变得更加暗淡。

图片[4]-【FPGA图像处理实战】- RGB与HSV互转-FPGA常见问题社区-FPGA CPLD-ChipDebug

  总的来说,HSV模型中的亮度V是一种描述颜色明暗程度的属性,它能够帮助我们调整颜色的明暗程度,并在颜色处理和计算机视觉等领域中发挥重要作用。

二、Python实现

 

1、主要函数

dst=cv2.cvtColor(src,code[, dst[, dstCn]])

  参数说明: dst(destination)就表示函数处理后的目的函数; src(source)表示源图像; code是opencv中色彩空间定义的宏常量,常用的有COLOR_BGR2GRAY、COLOR_GRAY2BGR、COLOR_BGR2HSV、COLOR_BGR2RGB等,但是实际上可以调用的参数多达247种。

2、实现代码

  • import cv2
    
    # 1. 读取图像
    rgb_image = cv2.imread('1280_720.bmp')
    
    # 2. 将RGB图像转换为YUV图像
    hsv_image = cv2.cvtColor(rgb_image, cv2.COLOR_RGB2HSV)
    
    # 3. 将YUV图像转回RGB图像
    rgb_image_again = cv2.cvtColor(hsv_image, cv2.COLOR_HSV2RGB)
    
    # 4. 显示图像
    cv2.namedWindow("rgb", 0)
    cv2.resizeWindow("rgb", 300, 180)  # 设置窗口大小
    cv2.namedWindow("hsv", 0)
    cv2.resizeWindow("hsv", 300, 180)  # 设置窗口大小
    cv2.namedWindow("rgb_a", 0)
    cv2.resizeWindow("rgb_a", 300, 180)  # 设置窗口大小
    cv2.imshow('rgb', rgb_image)
    cv2.imshow('hsv', hsv_image)
    cv2.imshow('rgb_a', rgb_image_again)
    
    # 4. 设置窗口显示时间,单位为毫秒(这里设置为100秒,可以根据需要调整)
    cv2.waitKey(100000)
    
    # 5. 关闭所有窗口
    cv2.destroyAllWindows()

     

3、实现效果 图片[5]-【FPGA图像处理实战】- RGB与HSV互转-FPGA常见问题社区-FPGA CPLD-ChipDebug 三、FPGA实现 RGB与HSV互转的公式中,可以发现其中涉及浮点数运算、除法运算,计算逻辑有一定复杂度。 对于这类数学公式类FPGA实现,首先第一步是简化运算公式和浮点数转整数,第二步写代码,第三步仿真测试。在写代码的过程中,可能需要迭代修改代码。

 

请登录后发表评论

    没有回复内容