C#スクリプトでOpenCVSharpのガンマ補正やリサイズ機能を使う。

コンピュータ

画像の縮小は色々なツールで実現することが出来ますが、補完方法により結果が異なります。OpenCVで使える補完方法のAreaを使うためのスクリプトを作成しました。
スクリプトでお手軽にOpenCVを使うのであればPythonが定番ですが、Windows環境だと日本語のパスの扱いに難があるのでC#スプクリプトを使って見ました。

ファイル名:GrayGammaResize.csx

#r "nuget: OpenCvSharp4, 4.11.0.20250507"
#r "nuget: OpenCvSharp4.runtime.win, 4.11.0.20250507"

using System.Runtime;
using OpenCvSharp;

// 入力ディレクトリ
string inDir = @"F:\output";
// 出力ディレクトリ
string outDir = @"F:\output\gray";

if (!Directory.Exists(outDir))
{
    Directory.CreateDirectory(outDir);
}

// ガンマ補正テーブル作成
double gamma = 1.5d;
//gamma = 0.0d;
var lut = new byte[256];

for(var i = 0; i < 256; i += 1)
    lut[i] = (byte)(System.Math.Pow((double)(i / 255.0d), 1.0d / gamma) * 255.0d);

// 出力画像の高さ
int h = 1600; // 1600px


foreach (var inFile in Directory.EnumerateFiles(inDir))
{
    WriteLine($"in:{inFile}");


    using (Mat gray = Cv2.ImRead(inFile, ImreadModes.Grayscale))
    {
        // ガンマ補正
        if (gamma != 0.0d)
            Cv2.LUT(gray, lut, gray);

        // 縮小
        double scale = (double)h / gray.Height;
        Cv2.Resize(gray, gray, new Size(0,0), scale, scale, InterpolationFlags.Area);

        string fileName = Path.GetFileName(inFile);
        string outFile = Path.Join(outDir, fileName);
        WriteLine($"out:{outFile}");
        Cv2.ImWrite(outFile, gray);
    }

}

コメント