我想將Bgr值(一個像素)轉換爲Hsv值。我怎樣才能做到這一點(沒有從頭開始編寫轉換代碼)在EmguCV中?如何將Bgr像素轉換爲EmguCV中的Hsv像素?
請注意,我對轉換整個圖像的色彩空間不感興趣,但只有一個像素,因此CvInvoke.cvCvtColor()
不適用於我。
我想將Bgr值(一個像素)轉換爲Hsv值。我怎樣才能做到這一點(沒有從頭開始編寫轉換代碼)在EmguCV中?如何將Bgr像素轉換爲EmguCV中的Hsv像素?
請注意,我對轉換整個圖像的色彩空間不感興趣,但只有一個像素,因此CvInvoke.cvCvtColor()
不適用於我。
好吧,我已經發現了利用給定的.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 hsvPixel = new Hsv(intermediate.GetHue(), intermediate.GetSaturation(), intermediate.GetBrightness());
乾杯。
如果您想在EmguCV中執行此操作,只需將圖像讀入圖像中,即可獲取像素的值並將其粘貼到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:[176151182]
Lena BGR Lena HSV
系統。 Drawing.Color爲您提供HSB - 不是HSV。這些數字對我來說很小,比如0.3和0.4的飽和度和亮度,當我期待136和152時。 – mrwaim