码迷,mamicode.com
首页 > 其他好文 > 详细

图像处理:AlphaBlend混合两张图片

时间:2018-05-28 13:46:08      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:das   使用   项目   show   ret   定义   png   sign   rcc   

使用vs2017新建一个项目

混合A,B两张图的基础算法:

outColor = srcColor * srcAlpha + destColor * (1 - srcAlpha)

输出颜色 = 源颜色 * 源混合因子 + 目标颜色 * ( 1 - 源混合因子 ) 

 

这里scrAlpha从源图的Alpha通道获取

代码如下:

// alphablendimg.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{
    // 读取两张图片
    Mat destImg = imread("backGround.jpg", -1);
    Mat srcImg = imread("foreGroundAsset.png", -1);
    // 取出A图片的Alpha值
    Mat bgra[4];
    split(srcImg, bgra);
    Mat outImage = Mat::zeros(destImg.size(), CV_8UC3);
    

    // 逐像素混合 A,B两张图的r,g,b颜色,混合公式 outColor = srcAlpha*srcColor + (1-scrAlpha)*destColor
    unsigned char* fptr = reinterpret_cast<unsigned char*>(srcImg.data);
    unsigned char* bptr = reinterpret_cast<unsigned char*>(destImg.data);
    unsigned char* aptr = reinterpret_cast<unsigned char*>(bgra[3].data);
    unsigned char* outImagePtr = reinterpret_cast<unsigned char*>(outImage.data);

    int numberOfPixels = srcImg.rows * srcImg.cols * srcImg.channels();
    int i, j;
    for (j = 0; j < numberOfPixels;)
    {
        float srcAlpha = (*aptr)/255.0;

        *outImagePtr = (*fptr)*srcAlpha + (*bptr)*(1 - srcAlpha); // Blue
        outImagePtr++;fptr++;bptr++;
        *outImagePtr = (*fptr)*srcAlpha + (*bptr)*(1 - srcAlpha); // Green
        outImagePtr++;fptr++;bptr++;
        *outImagePtr = (*fptr)*srcAlpha + (*bptr)*(1 - srcAlpha); // Red
        outImagePtr++;fptr++;bptr++;

        fptr++; // 跳过Alpha通道
        j += 4;

        aptr++;
    }

    imshow("alpha blended image", outImage);
    waitKey(0);
    return 0;
}
源图片:
技术分享图片

 


目标图片:
技术分享图片

 混合效果:

技术分享图片

 

 

 

图像处理:AlphaBlend混合两张图片

标签:das   使用   项目   show   ret   定义   png   sign   rcc   

原文地址:https://www.cnblogs.com/zzatp/p/9099599.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!