zoukankan      html  css  js  c++  java
  • OpenCV——百叶窗

    参考: PS 图像特效,百叶窗

    // define head function
    #ifndef PS_ALGORITHM_H_INCLUDED
    #define PS_ALGORITHM_H_INCLUDED
    
    #include <iostream>
    #include <string>
    #include "cv.h"
    #include "highgui.h"
    #include "cxmat.hpp"
    #include "cxcore.hpp"
    
    using namespace std;
    using namespace cv;
    
    void Show_Image(Mat&, const string &);
    
    #endif // PS_ALGORITHM_H_INCLUDED
    
    /*
    This program will generate
     "window shades" effect.
    
    */
    
    #include "PS_Algorithm.h"
    #include <time.h>
    
    using namespace std;
    using namespace cv;
    
    int main(void)
    {
        string Img_name("4.jpg");
        Mat Image_in;
        Image_in=imread(Img_name);
        // Show_Image(Image_in, Img_name);
    
        Mat Image_out(Image_in.size(), CV_32FC3);
        Image_in.convertTo(Image_out, CV_32FC3);
    
        Mat Map(Image_in.size(), CV_32FC3);
    
        float val;
        Mat temp;
    
        for (int i=0; i<Map.rows; i++)
        {
            val=i/255.0;
            temp=Map.row(i);
            temp.setTo(Scalar(val,val,val));
        }
    
        int H_shade=8;
        int Inter=5;
    
        int Num;
    
        Num=Map.rows/(H_shade+Inter);
    
        //cout<<Num;
    
        Mat Mask(Image_in.size(), CV_32FC3);
        Mask.setTo(Scalar(1.0,1.0,1.0));
    
        int row_begin=0;
    
        for (int i=0; i<=Num; i++)
        {
            if(i<Num)
            {
                row_begin=i*(H_shade+Inter);
                temp=Mask.rowRange(row_begin, row_begin+H_shade-1);
                temp.setTo(Scalar(0.0,0.0,0.0));
            }
            else
            {
                row_begin=i*(H_shade+Inter);
                temp=Mask.rowRange(row_begin, Image_in.rows-1);
                temp.setTo(Scalar(0.0,0.0,0.0));
            }
        }
    
        Mat M1, M2;
        Image_out=Image_out/255.0;
        cv::multiply(Image_out, -Mask+1, M1);
        cv::multiply(Map, Mask, M2);
    
        Image_out=M1+M2;
    
        Show_Image(Image_out, "out");
    
        imwrite("out.jpg", Image_out*255);
    
        waitKey();
        cout<<"All is well."<<endl;
    
    }
    
    
    // define the show image
    #include "PS_Algorithm.h"
    #include <iostream>
    #include <string>
    
    using namespace std;
    using namespace cv;
    
    void Show_Image(Mat& Image, const string& str)
    {
        namedWindow(str.c_str(),CV_WINDOW_AUTOSIZE);
        imshow(str.c_str(), Image);
    
    }
    

    原图 


    效果图




  • 相关阅读:
    watch 监听路由的改变
    三元运算符
    element-ui动态更改el-table某个单元格字体颜色
    vue 跨域问题导致前端无法携带cookie
    Vue 用checkbox实现两两组合多选且禁用第三个。
    表格数据宽度自适应方案
    echarts细节问题
    es6 解构赋值
    学习笔记-Python基础15-持久化-文件、pickle、shelve
    学习笔记-Python基础14-PyCharm调试
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9412630.html
Copyright © 2011-2022 走看看