如何在 EmguCV 中将 Bgr 像素转换为 Hsv 像素?

问题描述 投票:0回答:3

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

请注意,我对转换整个图像的颜色空间不感兴趣,而只对转换一个像素感兴趣,因此

CvInvoke.cvCvtColor()
对我不起作用。

c# opencv emgucv
3个回答
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);
}

}

结果: 背景:[87,74,182] 单纯疱疹病毒:[176,151,182]

 Lena BGR                    Lena HSV

LenaBGRLenaHSV


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());

干杯。


0
投票

抱歉唤醒了一个老问题......
由于 opencv/emgu 没有公开像素转换函数,有时我会使用这个:

Bgr bgrColor = new Bgr(...);
Hsv hsvColor = new Image<Bgr, byte>(1, 1, bgrColor).Convert<Hsv, byte>()[0, 0];

这根本没有优化,但会给出正确的颜色。

© www.soinside.com 2019 - 2024. All rights reserved.