3

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

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

4

2 回答 2

5

如果您想在 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);
}

}

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

 Lena BGR                    Lena HSV

莉娜BGR 丽娜HSV

于 2017-08-19T17:03:26.727 回答
3

好的,我已经找到了一种使用 .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());

干杯。

于 2012-11-20T10:18:31.997 回答