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

使用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;
}源图片:
目标图片:

混合效果:

 

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

时间: 2024-11-10 22:21:54

图像处理:AlphaBlend混合两张图片的相关文章

OpenCV入门:(四:混合两张图片)

1. 原理 对两张图片使用如下公式可以得到两张图片的混合图片, 其中f0(x),f1(x)分别是图片1和图片2同一位置的像素点. 2. OpenCV中的AddWeight函数 函数和参数说明: void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1) src1 – first input array. alph

Atitti 图像处理 图像混合 图像叠加&#160;blend 原理与实现

Atitti 图像处理 图像混合 图像叠加 blend 原理与实现 混合模式 编辑 本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 混合模式是图像处理技术中的一个技术名词,不仅用于广泛使用的Photoshop中,也应用于AfterEffect.llustrator . Dreamweaver. Fireworks等软件.主要功效是可以用不同的方法将对象颜色与底层对象的颜色混合.当您将一种混合模式应用于某一对象时,在此对象的图层或组下方的任何对象上都可看到混合模式的效果.

C# 判断两张图片是否一致的快速方法

#region 判断图片是否一致 /// <summary> /// 判断图片是否一致 /// </summary> /// <param name="img">图片一</param> /// <param name="bmp">图片二</param> /// <returns>是否一致</returns> public bool IsSameImg(Bitmap img

【Open CV基础】两张图片的Alpha融合

在Open CV的图像操作中,我们可以通过cvAddWeighted函数实现两张图片的融合,函数完整签名为: void cvAddWeighted( const CvArr* src1, double alpha, const CvArr* src2, double beta, double gamma, CvArr* dst ); 参数 意义 src1 第一张图片 alpha 融合时的第一张图片参数 src2 第二种图片 beta 融合时的第二种图片参数 gamma 常数项,往往取决于像素要调

HTML两张图片叠加问题的进一步修改

要想两张图片叠加,只需在circle添加一个Position:absolute就OK了 以上几步,很多大侠前辈都已经说过,相信不用再啰嗦,我想说的是一种扩展,将示例放到右边,可能因为我悟性低,研究了一上午才研究出来,但我还是想说出来,一来加深自己的记忆,二来希望其他朋友不必走这些弯路,希望支持的朋友顶一下,谢谢!

拼图代码-两张图片拼接

拼图代码--两张图片拼接: onCreate函数: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageview=(ImageView) findViewById(R.id.imageview); Bitmap background=BitmapFactory.decodeResou

JAVA 比较两张图片的相似度的代码

原文:http://www.open-open.com/code/view/1448334323079 import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; /** * 比较两张图片的相似度 * @author Guihua * */ public class BMPLoader { // 改变成二进制码 public static String[][] getPX(Stri

opencv_判断两张图片是否相同

QQ:231469242 pip install opencv 如果找不到版本,去非官方下载opencv第三方包http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载好文件放入C:/Anaconda3/Scripts 文件夹, 然后 用pip install opencv安装 # -*- coding: utf-8 -*- """ Created on Sat Dec 24 10:42:10 2016 @author: daxiong &q

两张图片叠加成一张图&&按XY轴比例缩放图片

两张图片叠加成一张图 这个代码也是之前在网上搜到的,只是实在找不到原始出处了.当然还有别的方法实现叠图的效果,这个经测试验证可用,仅此而已. [java] view plaincopy Bitmap bitmap1 = ((BitmapDrawable) getResources().getDrawable( R.drawable.ic_default_slide)).getBitmap(); Bitmap bitmap2 = ((BitmapDrawable) getResources().g