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

摘要:
具体算法原理请参考PS层混合算法II(线性加深、线性减薄、增亮、变暗)//PS_ algorithm.h#ifndefPSS_algorithm_h_INCLUDED#definePS_ALGOORITHM_h_ INCLUDED#include<iostream>#include˂string>#include“cv.h”#include“highgui.h”#include”cxmat.hpp“

具体的算法原理可以参考

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


免责声明:文章转载自《OpenCV——PS 图层混合算法 (二)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇随机生成验证码&amp;amp;手机号CSS媒体查询下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[转载]JavaScript 图片预览效果

随着浏览器安全性的提高,要实现图片预览也越来越困难。不过群众的智慧是无限的,网上也有很多变通或先进的方法来实现。在研究了各种预览方法后,作为总结,写了这个程序,跟大家一起分享。上次写的简便无刷新文件上传系统最初的目的就是用来实现这个图片预览效果。兼容:ie6/7/8, firefox 3.5.5后台支持下还兼容:opera 10.10, safari 4....

Linux查看进程和终止进程的技巧

1. 在LINUX命令平台输入1-2个字符后按Tab键会自动补全后面的部分(前提是要有这个东西,例如在装了tomcat的前提下,输入tomcat的to按tab)。   2. ps 命令用于查看当前正在运行的进程。   grep 是搜索   例如: ps -ef | grep java   表示查看所有进程里CMD是java的进程信息   ps -aux |...

ps 简单使用 ----- 将图片静态图片制作成动图

1、 准备好你需要静态图片  放到文件夹中 2、打开ps 软件    将右上角切换为   动感 3、观察下方时间轴   点击加号   将图片导入 按住shift  选择图片   4、切换为帧格式      选择循环次数 5、选择存储格式为  web    6、点击存储制作完成  ...

powershel学习(1)

1,powershell(1)oo脚本语言(2)在win7以上版本中替代bat(batchfile) (3)拥有集成开发环境(IDE)powershell ise 可断点调试(4)与bash不同powershell大小写不敏感2,虚拟盘,别名驱动器 alias(1)新建删除别名set-alias np notepadremove-item alias:\n...

CentOS中ps配合Kill进程的N种方法

首先,用ps查看进程,方法如下: $ ps -ef ……smx 1822 1 0 11:38 ? 00:00:49 gnome-terminalsmx 1823 1822 0 11:38 ? 00:00:00 gnome-pty-helpersmx 1824 1822 0 11:38 pts/0 00:00:02 bashsmx 1827 1 4 11...

【Photoshop】批处理与快捷批处理

   写在前面 搞图像的同学应该会常常碰到批量处理图片的情况,尤其是需要统一图片的格式、大小的时候。 单独处理一张图片,我往往会使用Photoshop,因为所有常用的图像算法PS都已经涵盖,先用PS验证思路将比直接开始写处理函数要轻松多了。 而面对一堆的图片需要处理时,我以往都是借助自己的程序完成(一张张进行PS的活当然不是人干的,得交给机器去做),但是...