图层混合

简介: // 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
目录
相关文章
|
存储
ArcGIS:模型构建器内变量的数据类型中栅格图层和栅格数据集的区别
ArcGIS:模型构建器内变量的数据类型中栅格图层和栅格数据集的区别
127 0
|
定位技术 编解码
GIS地图瓦片之缩放级别原理
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gisdoer/article/details/82781436 GIS地图瓦片之...
1903 0
平面设计实验五 图层及图层混合模式
平面设计实验五 图层及图层混合模式
116 0
|
缓存 定位技术
arcgis添加瓦片图层解决图层加载缓慢问题
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bitree1/article/details/74036374        为了提高用户浏览地图信息的速度,地图模版创建完成后,需要对地图模版进行发布,然后进行切片处理,即把发布后的地图模版按照一定的比例尺切成地图图片。
2017 0
案例分享:Qt+OSG三维点云引擎(支持原点,缩放,单独轴或者组合多轴拽拖旋转,支持导入点云文件)
案例分享:Qt+OSG三维点云引擎(支持原点,缩放,单独轴或者组合多轴拽拖旋转,支持导入点云文件)
|
缓存 编解码 算法
U4 4.0 混合光栅化
我在蚂蚁 [Codeday#4 广州站的演讲][1]上介绍了为 U4 4.0 新设计的渲染流水线, 我们称为直接合成(Direct Compositing),区别于原生 WebView 同步合成(Synchronous Compositing)的渲染流水线。 新渲染流水线除了更好的系统兼容性和支持独立 GPU 进程外,也希望通过简化合成器架构和支持直接光栅化来提升渲染性能,减少 GPU 内存
665 0
|
编解码
色彩原理和图层混合模式
像太阳光一样光线全部饱和时是白色。 做印刷时,先用RGB编辑好,再“图像---模式---CMYK”模式。 认为图片曝光不足时常调节色阶。   印刷设计常识(cite from:http://baike.china.alibaba.com/doc/view-d2513589.html) 1、什么是图像分辨率?为什么强调它?      答:高分辨率的图像比相同尺寸的低分辨率的图像包含的像素多,图像信息也较多,表现细节更清楚,这也就是考虑输出因素确定图像分辨率的一个原因。
939 0
|
9月前
|
测试技术
【sgTileImage】自定义组件:瓦片图拖拽局部加载、实现以鼠标为中心缩放
【sgTileImage】自定义组件:瓦片图拖拽局部加载、实现以鼠标为中心缩放

热门文章

最新文章