【计算机视觉】OPENCV对于有alpha通道的透明背景图片的读取和图片叠加
这个是我自己做的粗略的螺旋丸的图,导出为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的数值来代表该像素的透明度。
#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通道的透明背景图片的读取和图片叠加相关推荐
- OPENCV对于有alpha通道的透明背景图片的读取和图片叠加
这个是我自己做的粗略的螺旋丸的图,导出为png并带有alpha通道. 最后和一只狗合成成这个样子. 效果还是可以的. 为了实现这个效果,首先我们要明白具有透明通道的图片的opencv的读取方式.在Op ...
- [原]BMP位图 转换 透明 TGA图像 - 增加 alpha通道 -TGA文件格式初解
最近做一个将文字转换为图片做视频叠加字幕的软件,大家都知道VB的图像控件Picture Box只能输出BMP格式位图,自然我的软件是用Picture Box做图像输出的也不例外,但是客户要求要输出带a ...
- php 网页 透明背景图片,php 处理透明背景的图片时的问题
PHP图象处理之透明背景的gif和png图片的一些问题 1,直接读取有透明背景的PNG格式文件,然后直接输出,背景变成了黑色,gif则没有这种情况. 解决方法:使用 imagesavealpha ($ ...
- php 去掉图片背景透明背景图片,php 处理透明背景的图片时的问题
PHP图象处理之透明背景的gif和png图片的一些问题 1,直接读取有透明背景的PNG格式文件,然后直接输出,背景变成了黑色,gif则没有这种情况. 解决方法:使用 imagesavealpha ($ ...
- java图片透明浮水印_PHP 为图片加上浮水印 (含浮水印透明背景处理)
PHP 要为图片加上浮水印: 就是要将两张图合并在一起, 浮水印的图片要盖在上面. 现实状况还会遇到原图要缩略图后, 浮水印的图片可能也要跟着缩略图, 这些部分再此就不写了, 此部份缩略图可见此篇: ...
- 为什么存png还有白色底_用photoshop保存透明背景的图片为png格式,为什么打开后是白色背景了?...
Photoshop想要保存透2113明背景的图片要保存PNG格式,保存JPG格式就5261会变成图片.41021.电脑打开Photoshop.2.打1653开Photoshop后,打开一张图片.3.打 ...
- notepad设置背景颜色_Word2017中如何设置透明背景图和取消背景图
如何在Word2017中设置透明背景图 1.打开Word文档 2.选择"插入"-"形状",选择并绘制你所需要的背景图形状 3.选中所绘的形状,点击右键,选择&q ...
- 用php画一个蓝底红色的圆_PHP 画出 透明背景 的 圆形 图片程序
PHP 想要用 GD 来画出圆形.椭圆形等等的图形,该怎么画呢?背景想要是透明的,要怎么做呢? PHP 画出 透明背景 的 圆形 图片程序 这边来示范下述: 图片画出 圆形 和 椭圆形 画两个不同的圆 ...
- python opencv 为图片添加alpha通道并设置透明,判断是否存在alpha通道
读取图片 使用函数cv2.imread(filepath,flags)读入一副图片 filepath:要读入图片的完整路径 flags:读入图片的标志 cv2.IMREAD_COLOR:默认参数,读入 ...
最新文章
- Mac003--Maven安装与环境变量配置
- 实现一个不能被继承的类
- Running Maven project on Tomcat from Eclipse
- vue上传文件php,php文件上传 – 前端开发,JQUERY特效,全栈开发,vue开发
- ALGO-162——Airport Configuration
- python数据类型有哪些、分别有什么用途_python中的数据类型有哪些
- 记录一次数据同步到数据仓库的架构与实践
- 模式窗口(Modal Dialog) 导致 Session丢失的解决办法
- python什么时候用类设计_关于python:类模板的习惯用法或设计模式?
- Linux C语言解析 yaml,c – 用yaml cpp解析yaml
- python生成word目录_Python word_cloud导出字体路径后找不到字体路径
- java8时间转换函数学习,教你脱离jdf转换的痛苦
- 手动删除病毒经历【usgop.exe】
- UNIX 标准化 --ISO C标准 IEEE POSIX 标准 Single Unix Specification(SUS)
- 移动性能测试工具perfDog分享和wifi链接问题
- [附源码]java毕业设计基于Web的美食网站的设计与实现
- 计算两个日期之间的天数,你知道哪些函数能够计算呢?
- 【渝粤题库】广东开放大学 管理学基础 形成性考核
- 【荐读】职场生存法则和智慧
- Android博客大汇总