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)))));// 該方法會(huì)抽風(fēng),不知道為什么
                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]);// 查表調(diào)整

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

            // 新建一個(gè)圖用于疊加
            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));// 模糊平滑

            // 轉(zhuǎn)換成float3類型,便于后續(xù)疊加的乘法
            Mat resultf = new Mat();
            result.ConvertTo(resultf, MatType.CV_32FC3);

            // 開始疊加,乘法
            Cv2.Multiply(resultf, halo, resultf);

            // 重新轉(zhuǎn)回BGR U3
            resultf.ConvertTo(result, MatType.CV_8UC3);

            Cv2.ImShow("origin", lena);
            Cv2.ImShow("lomography", result);
            Cv2.WaitKey();
Lesson5-1.jpg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容