HSV转RGB

7 篇文章 0 订阅

公式

请添加图片描述

请添加图片描述

C代码实现


void HSVtoRGB(uint16_t h, uint16_t s, uint16_t v)
{
    uint8_t r,  g,  b;
    // R,G,B from 0-255, H from 0-360, S,V from 0-100
    int i;
    float RGB_min, RGB_max;
    RGB_max = v*2.55f;
    RGB_min = RGB_max*(100 - s) / 100.0f;

    i = h / 60;
    int difs = h % 60; // factorial part of h

    // RGB adjustment amount by hue
    float RGB_Adj = (RGB_max - RGB_min)*difs / 60.0f;

    switch (i) {
        case 0:
            r = RGB_max;
            g = RGB_min + RGB_Adj;
            b = RGB_min;
            break;
        case 1:
           r = RGB_max - RGB_Adj;
            g = RGB_max;
            b = RGB_min;
            break;
        case 2:
            r = RGB_min;
            g = RGB_max;
            b = RGB_min + RGB_Adj;
            break;
        case 3:
            r = RGB_min;
            g = RGB_max - RGB_Adj;
            b = RGB_max;
            break;
        case 4:
            r = RGB_min + RGB_Adj;
            g = RGB_min;
            b = RGB_max;
            break;
        default:		// case 5:
            r = RGB_max;
            g = RGB_min;
            b = RGB_max - RGB_Adj;
            break;
    }

    printf("R:%d\n",r);
    printf("G:%d\n",g);
    printf("B:%d\n",b);
}
在OpenCV中,Hue Saturation Value (HSV)是一种色彩空间模型,用于描述颜色,而Red Green Blue (RGB)则是另一种常用的色彩模型,它们通常用于显示器显示。将HSV换为RGB涉及到从色调、饱和度和值这三个HSV通道获取对应的红色、绿色和蓝色分量。 以下是一个简单的步骤: 1. **读取HSV图像**:首先,你需要使用`cv2.cvtColor()`函数将输入图像从BGR(默认的OpenCV颜色空间)换到HSV颜色空间。 ```python import cv2 hsv_image = cv2.cvtColor(original_BGR_img, cv2.COLOR_BGR2HSV) ``` 2. **分离HSV通道**:然后你可以通过索引来访问HSV的三个通道:Hue(0-179),Saturation(0-255),Value(0-255)。 3. **换为RGB**:在OpenCV中,直接将HSV换为RGB不是直接操作,因为每个HSV颜色对应的颜色在RGB中可能有多种可能性。你需要创建一个查找表(LUT)或编写算法来确定每个HSV值对应的最佳RGB组合。这是一个常见的自定义过程,需要预先定义规则或查找表。 4. **构建RGB图像**:利用计算得到的RGB分量,你可以用`numpy`数组创建一个新的RGB图像。 ```python # 示例中的换可能需要用到一些数学和色彩理论知识,这里假设有一个预定义的映射函数map_hsv_to_rgb rgb_image = map_hsv_to_rgb(hsv_image) ``` 请注意,实际的映射函数可能相当复杂,尤其是对于非常特定的应用需求。如果没有现成的映射,你可能需要使用更高级的技术,如插值或机器学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值