【问题标题】:Converting HSV data from base 255 to base 359将 HSV 数据从 base 255 转换为 base 359
【发布时间】:2019-10-09 04:58:39
【问题描述】:

我正在使用 emgucv。

我想做 hsl 过滤。

颜色范围是 0 到 359。

我正在过滤黄色,所以我正在寻找从 30 到 60 的色调。

我加载现有位图并将其加载为 hsv 图像:

var img = new Image<Hsv, int>(@"D:\yellow.jpg");

当我运行它时,我得到:

System.NotSupportedException: 'There is an error converting Emgu.CV.Structure.Bgr to Emgu.CV.Structure.Hsv: Requested value 'Bgr2Bgr' was not found.'

我可以这样做:

var img = new Image<Hsv, byte>(@"D:\yellow.jpg");

加载正常,但字节值最多只能达到 255。

我还能尝试什么?我是否必须将每个“像素”数据乘以值 * 255/359?

【问题讨论】:

    标签: c# image-processing colors emgucv


    【解决方案1】:

    最简单的方法是读取文件。这应该会给你一个 RGBA 图像。 RGBA转BGR,BGR转HLS。

    我使用垫子是这样的:

    Mat src = new Mat(@"D:\yellow.jpg");
    Mat Bgr = new Mat();
    Mat Hls = new Mat();
    CvInvoke.CvtColor(src, Bgr, ColorConversion.Rgba2Bgr);
    CvInvoke.CvtColor(Bgr, Hls, ColorConversion.Bgr2Hls);
    

    我认为是的。你想做 HSL 过滤,它告诉我你需要 HSL 格式的图像。在 OpenCV 的所有情况下,HSV、HSL 等仅达到 255,因此它们非常适合 8 位图像的字节。如果您使用 32 位深度,则值不变。不支持 16 位图像。对于 HSV,Hue 的值为 0 - 180(我使用带有 8 位无符号值的 BGR),我只需乘以或除以 2,但这仅在我需要向用户显示该值或获取 Hue 值时才需要来自用户。最终,它对我如何在内部使用 Hue 值没有影响。

    HSL 的处理方式完全相同,8 位的色调值为 0 - 180,不支持 16 位,32 位保持不变。

    道格

    【讨论】:

    • AllThat 没有解决我的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2013-09-21
    • 2021-05-20
    • 1970-01-01
    • 2022-10-23
    • 2014-02-26
    • 2011-01-24
    相关资源
    最近更新 更多