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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 人生哲理枕边书——你应该知道的165个人生哲理

    人生哲理枕边书——你应该知道的165个人生哲理人生哲理枕边书——你应该知道的165个人生哲理

    2022年7月11日
    11
  • java debug调试怎么用?[通俗易懂]

    java debug调试怎么用?[通俗易懂]我的qq2038373094在做项目的时候,尤其是涉及多个页面的传值的时候,debug调试十分有用,可以迅速帮你找到错误的原因!用debug的好处:1.跟踪变量,可以查看变量的值的变化2.迅速找到错误的原因,节省时间,找错小帮手那么debug调试助手怎么用,用在什么地方?debug用在java程序上,.class文件上面不适合jsp页面,不适合镶嵌在jsp页面…

    2022年10月16日
    1
  • goLand 2022.01激活码-激活码分享

    (goLand 2022.01激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年4月1日
    775
  • 3.RT-thread 项目实战–LED驱动及finsh组件调试

    3.RT-thread 项目实战–LED驱动及finsh组件调试RT-thread在19年12月份推出了一个很好用的工具RT-threadstdio,比Env更加的方便,接下来的代码开发我们就使用这个工具进行,不使用keil和IAR了。工具的一些配置和入门使用直接看官方的教学视频就可以了,这里我们不做过多的介绍,下面开始进入今天的正题。打开我们的软件后,点击文件–》新建–》RT-thread项目,然后取个项目名字,就叫temp_prj吧,然…

    2022年5月21日
    39
  • docker导入镜像命令_docker怎么删除镜像

    docker导入镜像命令_docker怎么删除镜像由于工作需要,要一次性导出机器上全部的镜像。

    2025年8月31日
    4
  • JSONObject详解「建议收藏」

    JSONObject详解「建议收藏」JSONObject只是一种数据结构,可以理解为JSON格式的数据结构(key-value结构),可以使用put方法给json对象添加元素。JSONObject可以很方便的转换成字符串,也可以很方便的把其他对象转换成JSONObject对象。maven:&lt;dependency&gt; &lt;groupId&gt;org.json&lt;/groupId&gt; &lt;ar…

    2022年4月19日
    53

发表回复

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

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