旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

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

上記で出来たヒートマップが以下の写真になります。
f:id:ni4muraano:20171018215712j:plain