zoukankan      html  css  js  c++  java
  • 使用OpenCV实现复古效果Lomography

    一、实现步骤

      1.通过查找表将一个曲线应用于原图的红色通道来操作图像

      2.通过对图像使用暗晕来实现复古效果

      代码步骤:

        1.加载原图

        2.创建lut矩阵

        3.拆分原图,并将红色分量应用于LUT

        4.将LUT后的红人分量合回原图

        5.创建一个内部带有白色圆圈的的灰色图像,并对这个图像执行大模糊

        6.将合并后的图像与大模糊后的图像相乘

        7.输出图像

    二、具体代码如下所示:

      

    /**
     * 复古效果展示
     * @param inputImagePath
     *
     * 实现步骤:
     * 1.通过查找表,将一个曲线应用于红色通道来实现颜色操作效果
     * 2.通过对图像使用暗晕来实现复古效果
     */
    void showLomographyImage(char* inputImagePath){
        //原图
        Mat src = imread(inputImagePath);
        //结果图
        Mat result;
        //exp函数
        const double exponential_e = exp(1.0);
        //创建lut
        Mat lut(1,256,CV_8UC1);
        for(int i=0;i<256;i++){
            float x= (float )i/256.0;
            //生成一条让暗值更暗,亮值更亮的曲线,其中x是可能的像素值(0~255),
            lut.at<uchar>(i)= cvRound(256*(1/(1+ pow(exponential_e,-((x-0.5)/0.1)))));
        }
        vector<Mat> bgr;
        split(src,bgr);
        //将LUT应用于红色通道
        LUT(bgr[2],lut,bgr[2]);
        //合并结果
        merge(bgr,result);
    
        //创建一个内部带有白色圆圈的灰色图像,如果此图应用于输入图像将的到从黑暗变为白色的强烈变化。
        Mat halo(src.rows,src.cols, CV_32FC3,Scalar(0.3,0.3,0.3));
        //画圆
        circle(halo,Point(src.cols/2,src.rows/2),src.cols/3,Scalar(1,1,1),-1);
        //用均值滤波函数对圆光晕执行大模糊,以获得平滑效果
        blur(halo,halo,Size(src.cols/3,src.cols/3));
        //将光晕应用于原图,可行的方法是将两个图像相乘。图像相乘必须位数相等,所以需要将输入图像从8位转换为32位浮点数。因为需要把具有0~1范围值的模糊图像与具有整数值的输入图像相乘。
        Mat resultF;
        //将输入图像转换为32位浮点类型
        result.convertTo(resultF,CV_32FC3);
        multiply(resultF,halo,resultF);
        //将32位浮点类型图像转为为8位整形图像
        resultF.convertTo(result,CV_8UC3);
        //大模糊后的八色圆圈灰色图像
        imshow("blur_circle_white",halo);
        //展示原图
        imshow("src",src);
        //复古效果
        imshow("Lomography",result);
        waitKey(0);
    
    }

    三、效果图

  • 相关阅读:
    记账本开发进程第四天
    记账本开发进程第三天
    记账本开发进程第二天
    记账本开发进程第一天
    《人月神话》阅读笔记三
    《人月神话》阅读笔记二
    一、计算机基础
    Fox and Minimal path CodeForces
    Maximum Value (二分+思维枚举)
    True Liars (思维想法+带权并并查集+01背包)
  • 原文地址:https://www.cnblogs.com/tony-yang-flutter/p/14842289.html
Copyright © 2011-2022 走看看