这个是我自己做的粗略的螺旋丸的图,导出为png并带有alpha通道。

最后和一只狗合成成这个样子。

效果还是可以的。

为了实现这个效果,首先我们要明白具有透明通道的图片的OpenCV的读取方式。在OpenCV里,正常是读取图像和写入图像默认都是忽略透明通道的,如果想要读取原图像中的透明通道,则在使用imread()函数时,后面的参数要使用CV_LOAD_IMAGE_UNCHANGED参数或是直接写-1也可以。比如:

Mat inimg = imread("dog.png", CV_LOAD_IMAGE_UNCHANGED); // 读取透明通道  
// 输出RGBA数值  
cout << (int)inimg.at<Vec4b>(0,0)[0] << endl  
     << (int)inimg.at<Vec4b>(0,0)[1] << endl  
     << (int)inimg.at<Vec4b>(0,0)[2] << endl  
     << (int)inimg.at<Vec4b>(0,0)[3] << endl;  

这样我们读取的图片就有了四个通道,也就是BGRA四个通道,第四个就是Alpha通道,这个通道通过0-255的数值来代表该像素的透明度。

我通过split函数分解矩阵的通道把png图片分解为B1矩阵,G1矩阵,R1矩阵,A1矩阵把背景图片分解为了B0矩阵,G0矩阵,R0矩阵。于是叠加的结果:令alpha = A1 , 令beta = 255 - alpha。
#include <vector>  
#include <stdio.h>  
#include <opencv2/opencv.hpp>  
  
using namespace cv;  
using namespace std;  
  
int cvAdd4cMat_q(cv::Mat &dst, cv::Mat &scr, double scale);  
  
int main()  
{  
    char str[16];  
    Mat img1 = imread("bk.jpg"), img2 = imread("img.png", -1);  
    Mat img1_t1(img1, cvRect(0, 0, img2.cols, img2.rows));  
    cvAdd4cMat_q(img1_t1,img2,1.0);  
    imshow("final",img1);  
    waitKey(0);  
    return 0;  
}  
  
int cvAdd4cMat_q(cv::Mat &dst, cv::Mat &scr, double scale)    
{    
    if (dst.channels() != 3 || scr.channels() != 4)    
    {    
        return true;    
    }    
    if (scale < 0.01)    
        return false;    
    std::vector<cv::Mat>scr_channels;    
    std::vector<cv::Mat>dstt_channels;    
    split(scr, scr_channels);    
    split(dst, dstt_channels);    
    CV_Assert(scr_channels.size() == 4 && dstt_channels.size() == 3);    
  
    if (scale < 1)    
    {    
        scr_channels[3] *= scale;    
        scale = 1;    
    }    
    for (int i = 0; i < 3; i++)    
    {    
        dstt_channels[i] = dstt_channels[i].mul(255.0 / scale - scr_channels[3], scale / 255.0);    
        dstt_channels[i] += scr_channels[i].mul(scr_channels[3], scale / 255.0);    
    }    
    merge(dstt_channels, dst);    
    return true;    
}    
最终使用这个方法,可以到达前图的效果。

【计算机视觉】OPENCV对于有alpha通道的透明背景图片的读取和图片叠加相关推荐

  1. OPENCV对于有alpha通道的透明背景图片的读取和图片叠加

    这个是我自己做的粗略的螺旋丸的图,导出为png并带有alpha通道. 最后和一只狗合成成这个样子. 效果还是可以的. 为了实现这个效果,首先我们要明白具有透明通道的图片的opencv的读取方式.在Op ...

  2. [原]BMP位图 转换 透明 TGA图像 - 增加 alpha通道 -TGA文件格式初解

    最近做一个将文字转换为图片做视频叠加字幕的软件,大家都知道VB的图像控件Picture Box只能输出BMP格式位图,自然我的软件是用Picture Box做图像输出的也不例外,但是客户要求要输出带a ...

  3. php 网页 透明背景图片,php 处理透明背景的图片时的问题

    PHP图象处理之透明背景的gif和png图片的一些问题 1,直接读取有透明背景的PNG格式文件,然后直接输出,背景变成了黑色,gif则没有这种情况. 解决方法:使用 imagesavealpha ($ ...

  4. php 去掉图片背景透明背景图片,php 处理透明背景的图片时的问题

    PHP图象处理之透明背景的gif和png图片的一些问题 1,直接读取有透明背景的PNG格式文件,然后直接输出,背景变成了黑色,gif则没有这种情况. 解决方法:使用 imagesavealpha ($ ...

  5. java图片透明浮水印_PHP 为图片加上浮水印 (含浮水印透明背景处理)

    PHP 要为图片加上浮水印: 就是要将两张图合并在一起, 浮水印的图片要盖在上面. 现实状况还会遇到原图要缩略图后, 浮水印的图片可能也要跟着缩略图, 这些部分再此就不写了, 此部份缩略图可见此篇: ...

  6. 为什么存png还有白色底_用photoshop保存透明背景的图片为png格式,为什么打开后是白色背景了?...

    Photoshop想要保存透2113明背景的图片要保存PNG格式,保存JPG格式就5261会变成图片.41021.电脑打开Photoshop.2.打1653开Photoshop后,打开一张图片.3.打 ...

  7. notepad设置背景颜色_Word2017中如何设置透明背景图和取消背景图

    如何在Word2017中设置透明背景图 1.打开Word文档 2.选择"插入"-"形状",选择并绘制你所需要的背景图形状 3.选中所绘的形状,点击右键,选择&q ...

  8. 用php画一个蓝底红色的圆_PHP 画出 透明背景 的 圆形 图片程序

    PHP 想要用 GD 来画出圆形.椭圆形等等的图形,该怎么画呢?背景想要是透明的,要怎么做呢? PHP 画出 透明背景 的 圆形 图片程序 这边来示范下述: 图片画出 圆形 和 椭圆形 画两个不同的圆 ...

  9. python opencv 为图片添加alpha通道并设置透明,判断是否存在alpha通道

    读取图片 使用函数cv2.imread(filepath,flags)读入一副图片 filepath:要读入图片的完整路径 flags:读入图片的标志 cv2.IMREAD_COLOR:默认参数,读入 ...

最新文章

  1. Mac003--Maven安装与环境变量配置
  2. 实现一个不能被继承的类
  3. Running Maven project on Tomcat from Eclipse
  4. vue上传文件php,php文件上传 – 前端开发,JQUERY特效,全栈开发,vue开发
  5. ALGO-162——Airport Configuration
  6. python数据类型有哪些、分别有什么用途_python中的数据类型有哪些
  7. 记录一次数据同步到数据仓库的架构与实践
  8. 模式窗口(Modal Dialog) 导致 Session丢失的解决办法
  9. python什么时候用类设计_关于python:类模板的习惯用法或设计模式?
  10. Linux C语言解析 yaml,c – 用yaml cpp解析yaml
  11. python生成word目录_Python word_cloud导出字体路径后找不到字体路径
  12. java8时间转换函数学习,教你脱离jdf转换的痛苦
  13. 手动删除病毒经历【usgop.exe】
  14. UNIX 标准化 --ISO C标准 IEEE POSIX 标准 Single Unix Specification(SUS)
  15. 移动性能测试工具perfDog分享和wifi链接问题
  16. [附源码]java毕业设计基于Web的美食网站的设计与实现
  17. 计算两个日期之间的天数,你知道哪些函数能够计算呢?
  18. 【渝粤题库】广东开放大学 管理学基础 形成性考核
  19. 【荐读】职场生存法则和智慧
  20. Android博客大汇总

热门文章

  1. java 分页查询的实现
  2. java常见算法面试题
  3. Linux(12)Debain系统安装远程控制软件
  4. CronTrigger定时任务
  5. 判断一个地图坐标是否在中国镜内
  6. ISIS路由协议详解(特征、与OSPF对比、拓扑结构、专业术语、路由器分类、网络类型、DIS、报文类型及抓包、邻居关系、路由渗透、路由过载OL位、ISIS认证分类、ISIS管理标签以及各种实验等)
  7. 希尔伯特空间(Hilbert space)
  8. Golang梦网云短信对接
  9. 全球排名第一的免费开源ERP Odoo替代料管理应用解决方案
  10. Mybatis 时间日期格式转换