OpenCVSharp4 lomography

            Mat lena = Cv2.ImRead("lena.jpg");

            // 建表
            Mat lut = new Mat(1, 256, MatType.CV_8UC1);
            for (int i = 0; i < 256; i++)
            {
                float x = i / 256.0f;
                //lut.Set<byte>(i, (byte)Math.Round(256 * (1 / (1 + Math.Pow(Math.E, -(x - 0.5f) / 0.1f)))));// 该方法会抽风,不知道为什么
                lut.Set<byte>(0, i, (byte)Math.Round(256 * (1 / (1 + Math.Pow(Math.E, -(x - 0.5f) / 0.1f)))));
            }

            Mat[] bgrs = Cv2.Split(lena);
            Cv2.LUT(bgrs[2], lut, bgrs[2]);// 查表调整

            Mat result = new Mat();
            Cv2.Merge(bgrs, result);// 重新合成

            // 新建一个图用于叠加
            Mat halo = new Mat(lena.Cols, lena.Rows, MatType.CV_32FC3, new Scalar(.3f, .3f, .3f));
            Cv2.Circle(halo, new Point(lena.Cols / 2, lena.Rows / 2), lena.Cols / 3, new Scalar(1, 1, 1), -1);
            Cv2.Blur(halo, halo, new Size(lena.Cols / 3, lena.Rows / 3));// 模糊平滑

            // 转换成float3类型,便于后续叠加的乘法
            Mat resultf = new Mat();
            result.ConvertTo(resultf, MatType.CV_32FC3);

            // 开始叠加,乘法
            Cv2.Multiply(resultf, halo, resultf);

            // 重新转回BGR U3
            resultf.ConvertTo(result, MatType.CV_8UC3);

            Cv2.ImShow("origin", lena);
            Cv2.ImShow("lomography", result);
            Cv2.WaitKey();
Lesson5-1.jpg
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容