HSV颜色空间也是图像处理中常用一个颜色空间,主要应用于调色处理。 本文将介绍一下RGB与HSV互转,其中复杂度比“RGB与YUV互转”要高一点,涉及到除法、浮点数、有符号数的运算。
一、HSV颜色空间介绍
1、HSV颜色空间
HSV(Hue, Saturation, Value)颜色模型,也称作六角锥体模型(Hexcone Model),是A. R. Smith于1978年根据颜色的直观特性创建的一种颜色空间。 这种模型以色调(Hue)、饱和度(Saturation)和亮度(Value)为基础,能够更加自然地表示和处理颜色,因而在计算机视觉、图像处理等领域得到了广泛应用。
2、色调(Hue)
H(Hue)代表色调,是描述颜色的一种属性,用来表示颜色的种类。色调是人在视觉上区分颜色的一种方式,类似于RGB模型中的红、绿、蓝等基本颜色。 HSV模型中的色调H,通常以角度来表示,范围从0度(红色)到120度(蓝色),再到240度(洋红色),再到360度(再次回到红色)。 这种循环对应了色轮上颜色的分布。不同的色调对应着色轮上不同的颜色,例如: – 0度到120度:从红色逐渐过渡到蓝色 – 120度到240度:从蓝色逐渐过渡到洋红色 – 240度到360度:从洋红色逐渐过渡到红色 在HSV模型中,色调H在数值上是对饱和度和亮度进行加权的,即在保持饱和度和亮度不变的情况下,调整色调可以得到不同颜色。色调H的变化会影响到颜色的外观,使得颜色在色轮上沿着指定的方向移动。 总的来说,HSV模型中的色调H是一种描述颜色种类的属性,它能够帮助我们区分不同的颜色,并在颜色处理和计算机视觉等领域中发挥重要作用。
3、饱和度(Saturation)
S(Saturation)代表饱和度,它是描述颜色的一种属性,用来表示颜色的纯净度和鲜艳程度。 饱和度S表示颜色的纯净度,即颜色的鲜明程度。当饱和度S为1时,表示颜色完全饱和,即颜色是最纯净、最鲜明的;而当饱和度S为0时,表示颜色完全去饱和,即颜色变为灰度,没有鲜明的色彩。 在HSV模型中,饱和度S的取值范围通常是0到1,其中: – 0:表示颜色完全去饱和,即颜色变为灰度,没有鲜明的色彩。 – 1:表示颜色完全饱和,即颜色是最纯净、最鲜明的。 饱和度S的变化会影响到颜色的外观,使得颜色变得更加鲜艳或者更加柔和。当饱和度增加时,颜色变得更加鲜艳;而当饱和度减小时,颜色变得更加柔和,甚至变为灰度。 总的来说,HSV模型中的饱和度S是一种描述颜色纯净度和鲜艳程度的属性,它能够帮助我们调整颜色的鲜明程度,并在颜色处理和计算机视觉等领域中发挥重要作用。
4、亮度(Value)
V(Value)代表亮度,它是描述颜色的一种属性,用来表示颜色的明暗程度。 亮度V表示颜色的明暗程度,即颜色的亮丽程度。当亮度V为1时,表示颜色完全亮丽,即颜色是最明亮的;而当亮度V为0时,表示颜色完全暗淡,即颜色变为黑色。 在HSV模型中,亮度V的取值范围通常是0到1,其中: – 0:表示颜色完全暗淡,即颜色变为黑色。 – 1:表示颜色完全亮丽,即颜色是最明亮的。 亮度V的变化会影响到颜色的外观,使得颜色变得更加明亮或者更加暗淡。当亮度增加时,颜色变得更加明亮;而当亮度减小时,颜色变得更加暗淡。
总的来说,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、实现效果 三、FPGA实现 RGB与HSV互转的公式中,可以发现其中涉及浮点数运算、除法运算,计算逻辑有一定复杂度。 对于这类数学公式类FPGA实现,首先第一步是简化运算公式和浮点数转整数,第二步写代码,第三步仿真测试。在写代码的过程中,可能需要迭代修改代码。
没有回复内容