OpenCVを使用して、ニーズに合ったアルゴリズムを開発できます。問題の解決策を見つけるために調査を行ったところ、「カラー バランスの問題はさまざまな方法で解決できる」ことに気付きました。
Photoshop で得られる「完璧な」画像を完全に再現するのではなく、元の画像よりも優れたものを作成する、非常に単純なアルゴリズムをコーディングする方法を紹介します。その後、Google の openCV でこれらのトピックを検索し、別のアプローチを試すことができます。これをコーディングするために、ここで入手できる新しい OpenCV NuGet パッケージを使用しました。出力ディレクトリ (デバッグ フォルダ) に openCV のバイナリを追加するだけで、すぐに実行できます。
次に、コードは次のとおりです。
public Form1()
{
InitializeComponent();
NamedWindow windowsOriginal = new NamedWindow("Original");
NamedWindow windowsModified = new NamedWindow("Modified");
IplImage img = OpenCV.Net.CV.LoadImage(@"D:\hZpWG.jpg", LoadImageFlags.Color);
IplImage imgDest = equalizeIntensity(img);
windowsOriginal.ShowImage(img);
windowsModified.ShowImage(imgDest);
}
IplImage equalizeIntensity(IplImage inputImage)
{
if(inputImage.Channels >= 3)
{
IplImage ycrcb = new IplImage(inputImage.Size, inputImage.Depth, inputImage.Channels);
OpenCV.Net.CV.CvtColor(inputImage, ycrcb, ColorConversion.Bgr2YCrCb);
IplImage Y = new IplImage(ycrcb.Size, IplDepth.U8, 1);
IplImage Cr = new IplImage(ycrcb.Size, IplDepth.U8, 1);
IplImage Cb = new IplImage(ycrcb.Size, IplDepth.U8, 1);
OpenCV.Net.CV.Split(ycrcb, Y, Cr, Cb, null);
OpenCV.Net.CV.EqualizeHist(Y, Y);
IplImage result = new IplImage(inputImage.Size, IplDepth.U8, inputImage.Channels);
OpenCV.Net.CV.Merge(Y, Cr, Cb, null, ycrcb);
OpenCV.Net.CV.CvtColor(ycrcb, result, ColorConversion.YCrCb2Bgr);
return result;
}
return null;
}
フォームに入れましたが、コンソール アプリケーションでも使用できます。
これが結果です
それが役に立てば幸い!