【问题标题】:How to convert Bgr pixel to Hsv pixel in EmguCV?如何在 EmguCV 中将 Bgr 像素转换为 Hsv 像素?
【发布时间】:2012-11-20 09:35:52
【问题描述】:

我想将 Bgr 值(一个像素)转换为 Hsv 值。如何在 EmguCV 中做到这一点(无需从头开始编写转换代码)?

请注意,我对转换整个图像的色彩空间不感兴趣,只对一个像素感兴趣,因此CvInvoke.cvCvtColor() 不适合我。

【问题讨论】:

    标签: c# opencv emgucv


    【解决方案1】:

    如果您想在 EmguCV 中执行此操作,只需将图像读入 Image 获取像素值并将其粘贴到 Hsv 结构中。

    例如:

    static void Main(string[] args)
    {
        bool haveOpenCL = CvInvoke.HaveOpenCL;
    
        bool haveOpenClGpu = CvInvoke.HaveOpenCLCompatibleGpuDevice;
    
        CvInvoke.UseOpenCL = true;
    
        Emgu.CV.Image<Bgr, Byte> lenaBgr = new Image<Bgr, Byte>(@"D:\OpenCV\opencv-3.2.0\samples\data\Lena.jpg");
    
        CvInvoke.Imshow("Lena BSG", lenaBgr);
    
        Bgr color = lenaBgr[100, 100];
    
        Console.WriteLine("Bgr: {0}", color.ToString());
    
        Emgu.CV.Image<Hsv, Byte> lenaHsv = new Image<Hsv, Byte>(@"D:\OpenCV\opencv-3.2.0\samples\data\Lena.jpg");
    
        CvInvoke.Imshow("Lena HSV", lenaHsv);
    
        Hsv colorHsv = lenaHsv[100, 100];
    
        Console.WriteLine("HSV: {0}", colorHsv.ToString());
    
        CvInvoke.WaitKey(0);
    }
    

    }

    结果: 背景:[87,74,182] HSV:[176,151,182]

     Lena BGR                    Lena HSV
    

    【讨论】:

      【解决方案2】:

      好的,我已经找到了一种使用 .NET 框架帮助的方法

      给定一个Bgr pixel ;

      1- 将颜色转换为System.Drawing.Color:

      System.Drawing.Color intermediate = System.Drawing.Color.FromArgb((int)pixel.Red, (int)pixel.Green, (int)pixel.Blue);
      

      2- 从中间体构造 Hsv。

      Hsv hsvPixel = new Hsv(intermediate.GetHue(), intermediate.GetSaturation(), intermediate.GetBrightness());
      

      干杯。

      【讨论】:

      • System.Drawing.Color 为您提供 HSB - 而不是 HSV。对我来说,这些数字看起来很小,比如饱和度和亮度分别为 0.3 和 0.4,而我预期为 136 和 152。
      猜你喜欢
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 2013-06-13
      • 2022-12-20
      • 1970-01-01
      • 2014-04-11
      相关资源
      最近更新 更多