RGBからHSVへの変換について、C#(.NET Framework)とpython(OpenCV)で結果が異なります。
理由をご教授いただけないでしょうか。
また、どちらが正しいでしょうか。
RGB画像は256x256で左上を原点として、画像1はR,G,B = 0,x,y、画像2はR,G,B = 255,x,yです。
各画像において上段がC#、下段がpythonで変換しました。
それぞれのソースコードです。
C#
1int r = 0; // 画像2では255 2int size = 256; 3 4// RGB画像 5Bitmap bmpRgb = new Bitmap(size, size); 6 7for (int x = 0; x < size; x++) 8{ 9 for (int y = 0; y < size; y++) 10 { 11 Color color = Color.FromArgb(r, x, y); 12 bmpRgb.SetPixel(x, y, color); 13 } 14} 15pictureBoxRgb.Image = bmpRgb; 16bmpRgb.Save("test.png"); # ここで作成した画像をpythonでRead 17 18// HSV画像 19Bitmap bmpH = new Bitmap(size, size); 20Bitmap bmpS = new Bitmap(size, size); 21Bitmap bmpV = new Bitmap(size, size); 22 23for (int x = 0; x < size; x++) 24{ 25 for (int y = 0; y < size; y++) 26 { 27 Color color = bmpRgb.GetPixel(x, y); 28 float h, s, v; 29 h = color.GetHue() * 179 / 360; 30 s = color.GetSaturation() * 255; 31 v = color.GetBrightness() * 255; 32 33 bmpH.SetPixel(x, y, Color.FromArgb((int)h, (int)h, (int)h)); 34 bmpS.SetPixel(x, y, Color.FromArgb((int)s, (int)s, (int)s)); 35 bmpV.SetPixel(x, y, Color.FromArgb((int)v, (int)v, (int)v)); 36 } 37}
python
1bgr = cv2.imread("test.png") # BGRでRead。C#で作成した画像 2hsv = cv2.cvtColor(bgr, cv2.COLOR_BGR2HSV) # BGR->HSV 3 4cv2.imwrite('hsv_h.png', hsv[:,:,0]) 5cv2.imwrite('hsv_s.png', hsv[:,:,1]) 6cv2.imwrite('hsv_v.png', hsv[:,:,2])
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/23 02:16