C#でノンローカルミーンフィルタを実行するCLIツール

コンピュータ

ソースコード

Program.cs

using OpenCvSharp;

class Program
{
    static void Main(string[] args)
    {
        if (args.Length < 2)
        {
            Console.WriteLine("usage: NonLocalMean <input> <output> [h]");
            return;
        }

        string input = args[0];
        string output = args[1];

        using var src = Cv2.ImRead(input, ImreadModes.Unchanged);

        if (src.Empty())
        {
            Console.WriteLine("load failed");
            return;
        }

        // h 自動 or 手動
        float h = args.Length >= 3
            ? float.Parse(args[2])
            : CalcAutoH(src.Width, src.Height);

        Console.WriteLine($"h = {h:F2}");

        using var dst = new Mat();

        if (src.Channels() == 1)
        {
            Cv2.FastNlMeansDenoising(src, dst, h, 7, 21);
        }
        else
        {
            Cv2.FastNlMeansDenoisingColored(src, dst, h, h, 7, 21);
        }

        Cv2.ImWrite(output, dst);
    }

    // ------------------------
    // 自動 h 計算
    // ------------------------
    static float CalcAutoH(int width, int height)
    {
        int maxDim = Math.Max(width, height);

        // 1000px基準でスケーリング
        float scale = maxDim / 1000f;

        return 10f * MathF.Sqrt(scale);
    }
}
/*

// プロジェクトの作成
dotnet new console
dotnet add package OpenCvSharp4
dotnet add package OpenCvSharp4.runtime.win

// ビルド&インストール
dotnet pack -c Release
dotnet tool install --global NonLocalMean --add-source .\bin\Release

// 使い方
NonLocalMean.exe input.png output.png 20

*/

NonLocalMean.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net10.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
      <!-- 追加 ここから -->
    <PackAsTool>true</PackAsTool> 
    <ToolCommandName>NonLocalMean</ToolCommandName>
    <IsPackable>true</IsPackable>
    <PackageId>NonLocalMean</PackageId>
    <Version>1.0.0</Version>
    <!-- 追加 ここまで -->
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="OpenCvSharp4" Version="4.13.0.20260318" />
    <PackageReference Include="OpenCvSharp4.runtime.win" Version="4.13.0.20260302" />
  </ItemGroup>

</Project>

コメント