• rgb转hsl,红绿蓝转色调饱和度亮度(颜色转换,c#)


    现在工业彩色相机越来越普及,经常会遇到解读颜色,即就是色调hue,所以我们经常会把常用的rgb转换hsl,h就是色调,颜色。h的定义0-360,如下:

    用到的转换公式如下:

    翻译成c#代码,总感觉效果不好,当红绿蓝颜色值相差不过8或10时,看上去,基本就是灰度图,即0-360里边,找不到结果,我就处理成-1了,即代表灰度图。

    代码如下: 

      void RGB2HSL3(int r, int g, int b, ref float H, ref float S, ref float L)
            {//20220927这个版本比0801版本好
                float R, G, B, Max, Min, del_Max;
                R = r / (float)255;     
                G = g / (float)255;
                B = b / (float)255;//做了除法之后B变成了一个很小的值
                Min = Math.Min(R, Math.Min(G, B));    //Min. value of RGB
                Max = Math.Max(R, Math.Max(G, B));    //Max. value of RGB
                del_Max = Max - Min;        //Delta RGB value

                H = 0; S = 0; L = 0;       

                L = (Max + Min) / 2.0f;//亮度

                if (Max == 0)
                {

                    S = 0;//饱和度
                    H = -1;
                 
                }
                else
                {
                    //if (Max != Min)
                    if (del_Max * 255 > 8)//三原色相差8范围内,认为是灰度图
                    {
                        if (R == Max && G >= B) { H = 60 * (G - B) / (float)del_Max + 0; }
                        if (R == Max && G < B) { H = 60 * (G - B) / (float)del_Max + 360; }
                        if (G == Max) { H = 60 * (B - R) / (float)del_Max + 120; }
                        if (B == Max) { H = 60 * (R - G) / (float)del_Max + 240; }


                        if (0 < L && L <= 0.5)
                        {
                            S = del_Max / (Max + Min);
                        }
                        else if (L > 0.5)
                        { S = del_Max / (2 - (Max + Min)); }

                    }//三原色相差8范围内,能不能给出灰度值?当没有颜色时gray=0.3r+0.59g+0.11b;//20220927
                    else//认为变化不大,同色,即灰度图//20220801
                    {
                      
                        H = -1; del_Max = 0;
                      
                        S = 0;
                    }

                  
                }
            }

     

  • 相关阅读:
    如何快速收割小程序第一波红利?
    PyTorch的生态和模型部署
    图像形态学操作
    首发AI原生应用开发平台——千帆AI原生应用开发工作台,加速企业AI应用落地
    【推搜】embedding评估 | faiss的topK向量检索
    MAC glucuronide linker-1/MAC glucuronide linker-2蛋白降解酶
    软件代码签名证书怎么申请
    Java-随机数据生成器(造数据)
    9.缓存优化
    完美男人谢安游山玩水风流潇洒,东山再起以一敌十
  • 原文地址:https://blog.csdn.net/ganggangwawa/article/details/127426415