OpenCV——PS 图层混合算法 (二)「建议收藏」

OpenCV——PS 图层混合算法 (二)

大家好,又见面了,我是全栈君。

详细的算法原理能够參考

PS图层混合算法之二(线性加深,线性减淡,变亮,变暗)


// PS_Algorithm.h

#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;

#endif // PS_ALGORITHM_H_INCLUDED


// main function

#include “PS_Algorithm.h”

void Linear_Burn(Mat& src1, Mat& src2, Mat& dst);
void Linear_Dodge(Mat& src1, Mat& src2, Mat& dst);
void Lighten(Mat& src1, Mat& src2, Mat& dst);
void Darken(Mat& src1, Mat& src2, Mat& dst);

int main(void)
{
    Mat Origin_Image1;
    Mat Origin_Image2;
    Origin_Image1=imread(“2.jpg”);
    Origin_Image2=imread(“3.jpg”);
    Mat Image_up(Origin_Image1.size(),CV_32FC3);
    Mat Image_down(Origin_Image2.size(), CV_32FC3);
    Origin_Image1.convertTo(Image_up,CV_32FC3);
    Origin_Image2.convertTo(Image_down,CV_32FC3);
    Image_up=Image_up/255;
    Image_down=Image_down/255;
    Mat Image_mix(Image_up);

    //Linear_Burn(Image_up, Image_down, Image_mix);
    //Linear_Dodge(Image_up, Image_down, Image_mix);
    //Lighten(Image_up, Image_down, Image_mix);
    //Darken(Image_up, Image_down, Image_mix);

    namedWindow(“Img”, CV_WINDOW_AUTOSIZE);
    imshow(“Img”,Image_mix);
    waitKey();
    cvDestroyWindow(“Img”);
    cout<<“All is well.”<<endl;
    return 0;
}

// linear Burn

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);
        }
    }
}

// linear dodge
void Linear_Dodge(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]=min(
                         src1.at<Vec3f>(index_row, index_col)[index_c]+
                         src2.at<Vec3f>(index_row, index_col)[index_c], (float)1.0);
        }
    }
}

// Lighten
void Lighten(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]);
        }
    }
}


// Darken
void Darken(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]=min(
                         src1.at<Vec3f>(index_row, index_col)[index_c],
                         src2.at<Vec3f>(index_row, index_col)[index_c]);
        }
    }



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115338.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 几种简单的随机数算法「建议收藏」

    几种简单的随机数算法「建议收藏」(1)产生一个范围内的随机数j=(int)(100.0*rand()/(RAND_MAX+1.0))//产生0到100的随机数(2)筛选型随机数x=random(100);while(x==6){x=random(100);}//产生0-99的随机数但不能是6(3)从一段连续的范围内取随机数x=random(11)+

    2022年7月26日
    43
  • pycharm安装教程2020.3_如何下载安装eclipse

    pycharm安装教程2020.3_如何下载安装eclipse简介PyCharm是一款PythonIDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如,调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等等。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。安装1.进入Pycharm官网的下载地址:链接:http://www.jetbrains.com/pycharm/download/#section=windows.2.professional表示专业

    2022年8月27日
    3
  • keepalived+Nginx实现高可用主从集群

    keepalived+Nginx实现高可用主从集群

    2021年6月3日
    95
  • c++入门教程–-12作用域

    c++入门教程–-12作用域

    2021年3月12日
    190
  • 八数码问题-A*(AStar)算法实现[通俗易懂]

    八数码问题-A*(AStar)算法实现[通俗易懂]八数码问题可以说得上是搜索问题中比较经典的,可以有很多种搜索策略,比如说有最常见的BFS,DFS,此外,A*也是一个比较普遍的搜索算法。在八数码问题A*往往可以得到最优的求解路径。

    2022年7月13日
    11
  • pycharm详细使用教程_pycharm使用方法

    pycharm详细使用教程_pycharm使用方法Pycharm新手使用教程(详解)【注】:如果想要下载Pycharm工具,直接去《开发工具》中进行下载。简介Jetbrains家族和Pycharm版本划分:pycharm是Jetbrains家族中的一个明星产品,Jetbrains开发了许多好用的编辑器,包括Java编辑器(IntelliJIDEA)、JavaScript编辑器(WebStorm)、PHP编辑器(PHPSto…

    2022年8月26日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号