图层混合

简介: // mix.cpp : 图像mix //   #include "stdafx.h" #include  #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.
 
// 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;
}





目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
目录
相关文章
|
3月前
|
API Python
Blender导出带透明贴图的gltf模型
Blender导出带透明贴图的gltf模型
165 0
Blender导出带透明贴图的gltf模型
|
3月前
|
算法 异构计算
第2章-图形渲染管线-2.1-架构
第2章-图形渲染管线-2.1-架构
29 0
|
6月前
|
定位技术
ArcGIS批量计算图层中矢量要素面积——ArcMap
ArcGIS批量计算图层中矢量要素面积——ArcMap
181 1
|
算法 搜索推荐 vr&ar
什么是模型混合模式?
GLTF编辑器,一款在线模型换肤软件
139 0
|
vr&ar 图形学 异构计算
GLTF编辑器如何合并相同材质的Mesh
建议在创建模型时尽量避免过多使用相同的材质。可以考虑使用材质实例化或者共享材质的方式,来降低模型中的材质数量,并优化渲染及文件大小等方面的性能
243 0
平面设计实验五 图层及图层混合模式
平面设计实验五 图层及图层混合模式
90 0
SwiftUI—两个图像视图之间的色彩混合
SwiftUI—两个图像视图之间的色彩混合
438 0
SwiftUI—两个图像视图之间的色彩混合
案例分享:Qt+OSG三维点云引擎(支持原点,缩放,单独轴或者组合多轴拽拖旋转,支持导入点云文件)
案例分享:Qt+OSG三维点云引擎(支持原点,缩放,单独轴或者组合多轴拽拖旋转,支持导入点云文件)
案例分享:Qt+OSG三维点云引擎(支持原点,缩放,单独轴或者组合多轴拽拖旋转,支持导入点云文件)
SwiftUI—使用图像视图强大的色彩调整功能
SwiftUI—使用图像视图强大的色彩调整功能
733 0
SwiftUI—使用图像视图强大的色彩调整功能
|
大数据 C++ 开发者
R 的图形组合、图形布局的精细控制| 学习笔记
快速学习 R 的图形组合、图形布局的精细控制
100 0