LoginSignup
0
1

More than 5 years have passed since last update.

露出を変えた2枚の写真でHDR

Last updated at Posted at 2016-12-24

写真を撮ったのです。

ところがコートが黒だったので、逆光で顔がつぶれてしまいました。

Blue.jpg

どこかのサービスで明るくした写真を作ったら、空が白くなって、東京タワーも朱色になってしまいました。

white.jpg

これはなさけない。

HDR

デジタルカメラを使った写真では、High Dynamic Rangeといって、露出の異なる複数の写真を合成して、ダイナミックレンジの向上した写真を撮影できるようになっています。
ところが、このHDRはフリーのサービスがあまりないうえに、使う写真は3枚以上とかで、今回の条件、すなわち写真が2枚、しかも露出を変えて撮影したのではなくて、撮ったあとに露出を変えた写真があるだけ、というのでは、そもそもHDRを構成する要素を満たしていないようです。
そこで、それなら自前でやってみようと考えました。

OriginalHDR

白飛びしている空の部分にはオリジナルを使い、それ以外の部分は、加工ずみの明るい写真を使います。
空飛びとは、RGBのうち、Rが200以上、Gが200以上、Bが215以上の色をいうようです。ざっくり。

        bool IsFirstPhoto = true;
        Bitmap FirstImage;
        private void HDR(string path) {
            //最初に暗い写真を読む。
            if (IsFirstPhoto) {
                FirstImage = new Bitmap(path);
                IsFirstPhoto = false;
                return;
            }

            Bitmap SecondImage = new Bitmap(path);
            Bitmap aftertheImage = new Bitmap(SecondImage, SecondImage.Width, SecondImage.Height);

            for (int Y = 0; Y < SecondImage.Height; Y++) {
                for (int X = 0; X < SecondImage.Width; X++) {
                    int pixcelData = SecondImage.GetPixel(X, Y).ToArgb();
                    Color pixcelARGB = Color.FromArgb(pixcelData);
                    int red = pixcelARGB.R;
                    int green = pixcelARGB.G;
                    int blue = pixcelARGB.B;

                    Color sky = Color.FromArgb(0, 200, 200, 215);
                    if (sky.R < red &&
                        sky.G < green &&
                        sky.B < blue) {
                        pixcelData = FirstImage.GetPixel(X, Y).ToArgb();
                        pixcelARGB = Color.FromArgb(pixcelData);
                    }
                    aftertheImage.SetPixel(X, Y, pixcelARGB);
                }
            }
            string saveFolder = Path.GetDirectoryName(path);
            string savefileName = saveFolder + @"\" + DateTime.Now.ToString("yyyy_MMdd_HHmm_ss") + ".png";
            aftertheImage.Save(savefileName, System.Drawing.Imaging.ImageFormat.Png);
        }

Change.jpg

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1