实验要求

现有一张4通道透明图像a.png:从其中提取出alpha通道并显示;用alpha混合,为a.png替换一张新的背景(背景图自选)png格式图片多了一个通道来显示透明度,具体如下图所示:

图片:

背景图:

效果图:

读取png的 alpha通道数,然后使用下图的公式:

将两张图片进行合成,其中imread("地址",-1),让第4个RGBA中的A通道,即为alpha通道,然后双重循环,遍历图片的像素,其中rows即行,cols即列,at(i,j)来遍历图片

代码:

#include <opencv2/opencv.hpp>
#include <iostream>
#include <cstdio>
using namespace std;
using namespace cv;int main()
{//读取透明图片Mat img = imread("G:\\图片\\图片1.png", -1);//-1使能读取第4个RGBA中的A通道,即为alpha通道Mat back_img = imread("G:\\图片\\图片4.png",-1);Mat mat(img.rows, img.cols, CV_8UC4);//#define CV_8UC4 CV_MAKETYPE(CV_8U,4)可以创建-----8位无符号的四通道---带透明色的RGB图像 for (int i = 0; i < img.rows; i++) {for (int j = 0; j < img.cols; j++) {//Mat::at()取值或改变某点的像素值比较耗时,可以采用Mat的模板子类Mat_<T>//Mat类中的at方法作用:用于获取图像矩阵某点的值或改变某点的值。double temp = img.at<Vec4b>(i, j)[3] / 255.0;mat.at<Vec4b>(i, j)[0] = (1 - temp)*back_img.at<Vec4b>(i, j)[0] + temp *img.at<Vec4b>(i, j)[0];mat.at<Vec4b>(i, j)[1] = (1 - temp)*back_img.at<Vec4b>(i, j)[1] + temp *img.at<Vec4b>(i, j)[1];mat.at<Vec4b>(i, j)[2] = (1 - temp)*back_img.at<Vec4b>(i, j)[2] + temp *img.at<Vec4b>(i, j)[2];mat.at<Vec4b>(i, j)[3] = (1 - temp)*back_img.at<Vec4b>(i, j)[3] + temp *img.at<Vec4b>(i, j)[3];}}namedWindow("alpha混合图像");imshow("alpha混合图像", mat);waitKey();return 0;
}

OpenCV图像基本操作——图像合成相关推荐

  1. Opencv图像基本操作

    唐宇迪博士opencv课程学习笔记 Opencv图像基本操作 数据读取-图像 数据读取-视频 截取部分图像数据 颜色通道提取 边界填充 数值计算 图像融合 图像重构 数据读取-图像 cv2.IMREA ...

  2. opencv 图像基本操作 像素值的获取、图像大小、ROI、通道分割与合并等

    opencv中的图像基本操作方法 访问和修改图像某像素点的值 函数 a=img[y,x] #获取像素点的值 img[y,x]=b #修改像素点的值 实例 import cv2 as cv import ...

  3. Opencv图像基本操作——读取、显示、截取图像、属性、颜色通道、边界填充、图像融合

    引言 我们都会有一个疑惑:计算机眼中的图像长什么样子呢? 首先拿来一张图片分割成无数个小格,每一个小格叫做像素点,计算机中的图像是由像素点构成的像素矩阵,像素点构成它的每一个值都是在0-255之间浮动 ...

  4. OpenCV计算机视觉实战 - Task1 - 一文详尽OpenCV 图像基本操作

    ################################################################# [纸上得来终觉浅,绝知此事要躬行] B站视频 新课件:https:/ ...

  5. OpenCV 图像基本操作

    ################################################################# [纸上得来终觉浅,绝知此事要躬行] B站视频 新课件:https:/ ...

  6. 4、opencv图像基本操作和算术运算16个应用案例

    1.图像加法运算(用numpy) 对像素值取模(大于255的减去255用余值作为像素) 通过将数组的数值类型定义为 dtype= np.uint8,可以保证数组值的范围在[0,255] 之间 impo ...

  7. OpenCV图像操作

    OpenCV图像操作 OpenCV图像操作 输入输出 图片 图像的基本操作 访问像素强度值 内存管理和引用计数 原始操作 可视化图像 OpenCV图像操作 输入输出 图片 C ++ 从文件加载图像: ...

  8. python打出由边框包围的_python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)...

    图像边框的实现 图像边框设计的主要函数 cv.copyMakeBorder()--实现边框填充 主要参数如下: 参数一:源图像--如:读取的img 参数二--参数五分别是:上下左右边的宽度--单位:像 ...

  9. Opencv--Mat图像基本操作

    Opencv图像处理基本操作 1基本数据类型 图像有若干个通道,灰度图像只有一个通道,而彩色具有红,绿,蓝组成,但是OpenCv以逆序的方式来存储三个分量,还可以使用第四个透明度(alpha),可以使 ...

最新文章

  1. 北京中医药大学等8所高校被世界医学院校名录除名,毕业生无法获取英美从医资格...
  2. java 线程aba,JAVA中CAS-ABA的问题解决方案AtomicStampedReference
  3. 2021年 第12届 蓝桥杯 第3次模拟赛真题详解及小结【Java版】
  4. AJAX DELETE
  5. 计算几何/sgu 124 Broken line
  6. 设置堆内存大小_jmap和jhat命令行工具的配合使用,更好的掌握堆内存状况
  7. Algs4-1.4.38 3-sum的初级算法与ThreeSum性能比较
  8. java面向对象编程基础实验报告_20155313 实验三《Java面向对象程序设计》实验报告...
  9. hashmap7源码浅析及与hashmap8的比较
  10. Spring MVC(十六)--Spring MVC国际化实例
  11. 美萍系统怎么修改服务器时间,局域网中如何架设美萍VOD视频点播系统服务器
  12. “APP故障门”频出,移动应用开发到底应该怎么做?
  13. Netlimiter 3.0 注册码
  14. 微信小程序实现表情包编辑
  15. NB-IoT是什么?
  16. 【黑马程序员】20天学会Java-基础阶段笔记
  17. oracle导出数据视频教程,Oracle数据导入导出基本操作示例
  18. 拼多多店铺logo怎么做?
  19. oracle索引查询
  20. 2021年T电梯修理考试报名及T电梯修理考试试卷

热门文章

  1. 华为机试HJ69:矩阵乘法
  2. Uva 10559 消除方块
  3. python的学习结构
  4. 进阶:主流的cpu插槽类型详解
  5. 线程池在美团的最佳实践
  6. 大数据实战【千亿级数仓】阶段三
  7. 常见CSS鼠标悬浮动画-hover属性
  8. 通过平面图分析计算机网络,第五人格格里奥的回忆地图平面图 里奥的回忆地图解析...
  9. 马化腾:非常看重小程序,小游戏将会是微信互联网的焦点?
  10. NeuroAI作者,冷泉港主任独家专访:忽视神经科学给我们的启示是愚蠢的