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


C#スクリプトのすゝめ(.csx)
C#スクリプトはコンパイラ型の言語であるC#をスクリプト言語の様に扱うことが出来ます。通常のC#プログラミングでは、新しくプロジェクトを作成して、複数の設定やファイルを準備する必要があります。しかし、C#スクリプト(.csx)であれば、プロ...
ファイル名: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);
}
}
コメント