图像处理: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", -);
Mat srcImg = imread("foreGroundAsset.png", -);
// 取出A图片的Alpha值
Mat bgra[];
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[].data);
unsigned char* outImagePtr = reinterpret_cast<unsigned char*>(outImage.data); int numberOfPixels = srcImg.rows * srcImg.cols * srcImg.channels();
int i, j;
for (j = ; j < numberOfPixels;)
{
float srcAlpha = (*aptr)/255.0; *outImagePtr = (*fptr)*srcAlpha + (*bptr)*( - srcAlpha); // Blue
outImagePtr++;fptr++;bptr++;
*outImagePtr = (*fptr)*srcAlpha + (*bptr)*( - srcAlpha); // Green
outImagePtr++;fptr++;bptr++;
*outImagePtr = (*fptr)*srcAlpha + (*bptr)*( - srcAlpha); // Red
outImagePtr++;fptr++;bptr++; fptr++; // 跳过Alpha通道
j += ; aptr++;
} imshow("alpha blended image", outImage);
waitKey();
cv::destroyAllWindows();
return ;
}
源图片:
目标图片:
混合效果:
图像处理:AlphaBlend混合两张图片的更多相关文章
- OpenCV入门:(四:混合两张图片)
1. 原理 对两张图片使用如下公式可以得到两张图片的混合图片, 其中f0(x),f1(x)分别是图片1和图片2同一位置的像素点. 2. OpenCV中的AddWeight函数 函数和参数说明: ) s ...
- opencv_判断两张图片是否相同
QQ:231469242 pip install opencv 如果找不到版本,去非官方下载opencv第三方包http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下 ...
- Atitti 图像处理 图像混合 图像叠加 blend 原理与实现
Atitti 图像处理 图像混合 图像叠加 blend 原理与实现 混合模式 编辑 本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 混合模式是图像处理技术中的一个技术名词,不 ...
- HTML两张图片叠加问题的进一步修改
要想两张图片叠加,只需在circle添加一个Position:absolute就OK了 以上几步,很多大侠前辈都已经说过,相信不用再啰嗦,我想说的是一种扩展,将示例放到右边,可能因为我悟性低,研究了一 ...
- Java 比较两张图片的相似度
import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; /** * 比较两张图片 ...
- iOS把两张图片合成一张图片
0x00 步骤 先读取两张图片把创建出CGImageRef 创建上下文画布 把图片依次画在画布指定位置上 从上下文中获得合并后的图片 关闭上下文 释放内存 0x01 代码实现 - (void)comp ...
- OpenCV两张图片的合并
转载请注明出处..! http://blog.csdn.net/zhonghuan1992 OpenCV两张图片的合并 原理: 两张图片合并,想想图片是用一个个像素点来存储.每一个像素点有他的值. 那 ...
- 用python对比两张图片的不同
from PIL import Image from PIL import ImageChops def compare_images(path_one, path_two, diff_save_lo ...
- java实现把两张图片合并(Graphics2D)
package com.yin.text; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.i ...
随机推荐
- 什么是神经网络 (Neural Network)
反向传播: 可以看作是再一次将传过来的信号传回去, 看看这个负责传递信号神经元对于”讨糖”的动作到底有没有贡献, 让它好好反思与改正, 争取下次做出更好的贡献. 生物神经网络和人工神经网络的差别: 人 ...
- 换根DP(二次扫描)
参考来自这里: https://blog.csdn.net/qq_41286356/article/details/94554729 题目在这里 https://ac.nowcoder.com/acm ...
- 洛谷$P3324\ [SDOI2015]$星际战争 网络流+二分
正解:网络流+二分 解题报告: 传送门$QwQ$ 其实我第一反应是费用流来着,,,但是仔细想了下发现我不会实现各个武器之间独立同时?而且攻击是连续的答案可能是小数嘛$QwQ$. 所以显然不是递推就二分 ...
- 超详细Node安装教程
今天周末休息,我制定了我的2020年度规划,其中包含编写50篇养成写博文的习惯.算下来平均每周一篇,感觉也不是很难,但我的写作能力不是很好,争取一次比一次好!希望自己能够坚持下去.2020为自己而活, ...
- 东拼西凑完成一个“前端框架”(5) - Tabs操作
目录 东拼西凑完成一个后台 "前端框架" (1) - 布局 东拼西凑完成一个后台 "前端框架" (2) - 字体图标 东拼西凑完成一个"前端框架&qu ...
- git 汇总
- IDEA 配置及常用快捷键
常用快捷键 1.Ctrl+Alt+T 把选择的代码放入 try{} 或者 if{} 里 2.Ctrl+O 重写方法提示 3.Alt+回车 导包提示 4.Alt+/ 代码提示(默认不是这个,需要参照后文 ...
- Netty快速入门(06)Netty介绍
前面简单的介绍了Java I/O 和NIO,写了示例程序. Java I/O是阻塞的,为了让它支持多个并发,就要针对每个链接启动线程,这种方式的结果就是在海量链接的情况下,会创建海量的线程,就算用线程 ...
- 小白学 Python 爬虫(39): JavaScript 渲染服务 scrapy-splash 入门
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- mysql索引创建和使用细节
最近困扰自己很久的膝盖积液手术终于做完,在家养伤,逛技术博客看到easyswoole开发组成员仙士可博客有关mysql索引方面的知识,自己打算重温下. 正常业务起步数据表数据量较少,不用考虑使用索引, ...