• 图层混合


     
    // mix.cpp : 图像mix
    //
     
    #include "stdafx.h"
    #include <iostream>
    #include "opencv2/core/core.hpp"
    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/imgproc/imgproc.hpp"
    using namespace std;
    using namespace cv;
     
    // Multiply 正片叠底
    void Multiply(Mat& src1, Mat& src2, Mat& dst)
    {
        for(int index_row=0; index_row<src1.rows; index_row++)
        {
            for(int index_col=0; index_col<src1.cols; index_col++)
            {
                for(int index_c=0; index_c<3; index_c++)
                    dst.at<Vec3f>(index_row, index_col)[index_c]=
                    src1.at<Vec3f>(index_row, index_col)[index_c]*
                    src2.at<Vec3f>(index_row, index_col)[index_c];
            }
        }
    }
     
    // Color_Burn 颜色加深
    void Color_Burn(Mat& src1, Mat& src2, Mat& dst)
    {
        for(int index_row=0; index_row<src1.rows; index_row++)
        {
            for(int index_col=0; index_col<src1.cols; index_col++)
            {
                for(int index_c=0; index_c<3; index_c++)
                    dst.at<Vec3f>(index_row, index_col)[index_c]=1-
                    (1-src1.at<Vec3f>(index_row, index_col)[index_c])/
                    src2.at<Vec3f>(index_row, index_col)[index_c];
            }
        }
    }
     
    // 线性增强
     
    void Linear_Burn(Mat& src1, Mat& src2, Mat& dst)
    {
        for(int index_row=0; index_row<src1.rows; index_row++)
        {
            for(int index_col=0; index_col<src1.cols; index_col++)
            {
                for(int index_c=0; index_c<3; index_c++)
                    dst.at<Vec3f>(index_row, index_col)[index_c]=max(
                    src1.at<Vec3f>(index_row, index_col)[index_c]+
                    src2.at<Vec3f>(index_row, index_col)[index_c]-1, (float)0.0);
            }
        }
    }
     
    int _tmain(int argc, _TCHAR* argv[])
    {    
        //首先做灰度的mix
        Mat src = imread("1.jpg");
        Mat mask = imread("mask2.jpg");
        Mat maskF(src.size(),CV_32FC3);
        Mat srcF(src.size(),CV_32FC3);
        Mat dstF(src.size(),CV_32FC3);
        src.convertTo(srcF,CV_32FC3);
        mask.convertTo(maskF,CV_32FC3);
        srcF = srcF /255;
        maskF = maskF/255;
        Mat dst(srcF);
        //正片叠底
        Multiply(srcF,maskF,dstF);
        dstF = dstF *255;
        dstF.convertTo(dst,CV_8UC3);
        imwrite("正片叠底.jpg",dst);
        // Color_Burn 颜色加深
        Color_Burn(srcF,maskF,dstF);
        dstF = dstF *255;
        dstF.convertTo(dst,CV_8UC3);
        imwrite("颜色加深.jpg",dst);
        // 线性增强
        Linear_Burn(srcF,maskF,dstF);
        dstF = dstF *255;
        dstF.convertTo(dst,CV_8UC3);
        imwrite("线性增强.jpg",dst);
        waitKey();
        return 0;
    }





  • 相关阅读:
    [NOIP2018-普及组] 对称二叉树
    UVA1637 【纸牌游戏 Double Patience】
    [SHOI2002]滑雪-题解
    题解 CF1437E 【Make It Increasing】
    题解 P4331 【[BalticOI 2004]Sequence 数字序列】
    NOIp 2020游记
    题解 P3825 【[NOI2017]游戏】
    题解 P6453 【[LNOI2014]LCA】
    题解 P6453 【[COCI2008-2009#4] F】
    题解 P5779 【[CTSC2001]聪明的学生】
  • 原文地址:https://www.cnblogs.com/jsxyhelu/p/4695618.html
Copyright © 2020-2023  润新知