【OpenCVSharp】 ヒートマップを作成する
OpenCVSharpを使ってヒートマップを描くプログラムのメモです。ヒートマップは赤⇒緑⇒青の順で遷移するため、HSV空間を使い、その後RGB空間に戻すと簡単に作成できます(OpenCVでは0が赤、60が緑、120が青に相当します)。
// 画像サイズ const int size = 101; // ガウス関数のシグマ const double sigma = 20.0; // HSVを記録する行列 var hsvMap = new Mat(new Size(size, size), MatType.CV_8UC3); for (int i = -50; i <= 50; ++i) { for (int j = -50; j <= 50; ++j) { // ガウス関数の値 double g = Math.Exp(-(Math.Pow(i, 2) + Math.Pow(j, 2))/(2.0*Math.Pow(sigma, 2))); // 色相の計算(OpenCVでは0で赤、120で青) byte hue = (byte)(120*(1.0 - g)); hsvMap.Set(i+50, j+50, new Vec3b(hue, 255, 255)); } } // HSVをBGRに変換する var bgrMap = new Mat(new Size(size, size), MatType.CV_8UC3); Cv2.CvtColor(hsvMap, bgrMap, ColorConversionCodes.HSV2BGR); // ヒートマップの保存 bgrMap.ImWrite("heatmap.bmp"); hsvMap.Dispose(); bgrMap.Dispose();
上記で出来たヒートマップが以下の写真になります。