【问题标题】:changing white and black color using HSV color space使用 HSV 颜色空间更改白色和黑色
【发布时间】:2012-01-03 15:14:47
【问题描述】:

我将 RGB 彩色图像转换为 HSV 颜色空间,并使用轨迹栏更改色调并将其转换回 RGB 值。此方法工作正常,并且除了白色和黑色像素外会改变颜色。这是为什么?

 public static Color ColorFromHSV(double hue, double saturation, double value)
{
    int hi = Convert.ToInt32(Math.Floor(hue / 60)) % 6;
    double f = hue / 60 - Math.Floor(hue / 60);

    value = value * 255;
    int v = Convert.ToInt32(value);
    int p = Convert.ToInt32(value * (1 - saturation));
    int q = Convert.ToInt32(value * (1 - f * saturation));
    int t = Convert.ToInt32(value * (1 - (1 - f) * saturation));

    if (hi == 0)
        return Color.FromArgb(255, v, t, p);
    else if (hi == 1)
        return Color.FromArgb(255, q, v, p);
    else if (hi == 2)
        return Color.FromArgb(255, p, v, t);
    else if (hi == 3)
        return Color.FromArgb(255, p, q, v);
    else if (hi == 4)
        return Color.FromArgb(255, t, p, v);
    else
        return Color.FromArgb(255, v, p, q);
}

public void convertToHSV(Color color, out double hue, out double saturation, out double value)
        {
            int max = Math.Max(color.R, Math.Max(color.G, color.B));
            int min = Math.Min(color.R, Math.Min(color.G, color.B));

            hue = color.GetHue();
            saturation = (max == 0) ? 0 : 1d - (1d * min / max);
            value = max / 255d;

        }

【问题讨论】:

    标签: c# image-processing colors rgb hsv


    【解决方案1】:

    因为白色、灰色和黑色没有色相,所以如果色相改变,它们也不会改变。

    【讨论】:

    • 确实:只有亮度会随着黑色、白色和灰色的变化而变化。饱和度(可以认为是颜色的强度)为 0,因此色调(颜色)没有影响。
    • 饱和度 = (max == 0) ? 0 : 1d - (1d * min / max) 这段代码发生了什么?
    猜你喜欢
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多