使用cvAddWeighted执行Alpha融合

cvAddWeighted(img1, alpha, img2, beta, gamma, dst);

img1:第一张图片

alpha:融合时第一张图片的参数

img2:第二张图片

beta:融合时第二张图片的参数

gamma:常数项,往往取决于像素要调整到的平均值和最大值

dst:输出的图像

dst = alpha*src1 + beta*src2 + gamma
当alpha为a,beta为1-a,gamma为0,其中,0<=a<=1时,融合方程被称为标准融合方程。

因为学习得时候感觉记笔记很麻烦,所以一般函数的特点和作用我都是直接在程序上进行注释

#include<opencv2/opencv.hpp>
#include<iostream>
#include<opencv2/highgui/highgui_c.h>using namespace std;
using namespace cv;int main(int argc, char** argv) {Mat src1, src2, dst;src1 = imread("C:/临时文件夹/无畏.jpg");src2 = imread("C:/临时文件夹/test2.jpg");if (!src1.data) {cout << "could not load image 无畏..." << endl;return -1;}if (!src2.data) {cout << "could not load image test2..." << endl;return -1;}//首先需要判断读出来的两个图片是否大小一样,一样就可以融合,不一样就需要做相应的处理double alpha = 0.5;if (src1.rows == src2.rows && src1.cols == src2.cols && src1.type() == src2.type()) {addWeighted(src1, alpha, src2, (1.0 - alpha), 0.0, dst);imshow("无畏", src1);imshow("test", src2);namedWindow("blend demo", CV_WINDOW_AUTOSIZE);//AUTOSIZE的窗口是不能进行伸缩变换的,所以如果图片过大那么屏幕可能显示不完整imshow("blend demo", dst);}else {//这里把src1图片的大小进行改变Mat changesrc1;resize(src1,changesrc1,src2.size());//可以直接改变src1的大小不初始化,把src1变得跟src2一样大小//resize()函数第一个参数是原图像,即待改变大小的图像//第二个参数是输出,改变大小之后的图像,这个图像和原图像具有相同的内容,只是大小和原图像不一样而已;//第三个代表原图缩放到的指定大小addWeighted(changesrc1, alpha, src2, (1.0 - alpha), 0.0, dst);//是像素按照权重叠加,即图像融合//add(changesrc1, src2, dst, Mat());//直接add出来的图像会很突兀奇怪//multiply(changesrc1, src2, dst, 1,0);//也是融合,但是融合出来的也很奇怪}//也可以自己随便定义一个图片大小进行融合/*else {Mat changesrc1, changesrc2;changesrc1 = Mat::zeros(500, 750, CV_8UC3);changesrc2 = Mat::zeros(500, 750, CV_8UC3);resize(src1, changesrc1, changesrc1.size());resize(src2, changesrc2, changesrc2.size());addWeighted(changesrc1, alpha, changesrc2, (1.0 - alpha), 0.0, dst);}*///namedWindow("input", CV_WINDOW_NORMAL);//NORMAL输出的窗口可以伸缩变换//namedWindow("input", CV_WINDOW_FREERATIO);//FREERATIO的窗口可以随意调整大小imshow("无畏", src1);imshow("test", src2);namedWindow("blend demo", CV_WINDOW_FREERATIO);//如果图片比较大,屏幕显示不完整可以使用上面的normal和freeratio,这样就可以拉伸窗口看你融合的图片imshow("blend demo", dst);waitKey(0);return 0;
}

两张原图这里就不放了,最后输出的图片长这样

新手学编程,不足之处还希望大家多多指正>*_*<

学习opencv第5天C++Opencv两张图片Alpha融合相关推荐

  1. 【Opencv】Python+openCV实现全景图拼接(左右两张图片拼接成一张全景图)

    Python+openCV实现全景图拼接(左右两张图片拼接成一张全景图) 全景图拼接 思路 具体步骤 代码与结果 代码 效果测试1 效果测试2 全景图拼接 思路 这个就是简单对左右两张图进行拼接,希望 ...

  2. OpenCV和Python进行SIFT算法——两张图片的关键点匹配

    文章目录 一.SIFT的介绍 二.SIFT特征检测过程 三.利用SIFT实现两张图片的匹配 参考资料 一.SIFT的介绍 概念 SIFT称为尺度不变特征变换(Scale-invariant featu ...

  3. 比较两张图片的相似性

    1.原图上可以发现的信息,两张图拍摄角度不一样,图一拍的比较正,聚焦近:图二拍的有点倾斜,聚焦远.光照不一样,图一光照亮度要比图二高.图片中水泥模子干湿程度不一样,图一的水泥已经完全干了:图二还是水泥 ...

  4. python两张图片融合_python实现两张图片的像素融合

    本文实例为大家分享了python实现两张图片像素融合的具体代码,供大家参考,具体内容如下 通过计算两张图片的颜色直方图特征,利用直方图对图片的颜色进行融合. import numpy as np im ...

  5. OpenCV学习笔记3:找出人脸,同时比较两张图片中的人脸相似度

    转自 终于到了有实际应用的功能了,有2张图片,里面各有一个人脸,我的目的是比较这两个人脸的相似度,这里用到了facedetect的功能,还有图像转换,图像剪切,以及直方图的比较.具体流程是: 1.分别 ...

  6. 【OpenCV 4开发详解】两图像间的像素操作

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  7. OpenCV学习笔记(二十一)——绘图函数core OpenCV学习笔记(二十二)——粒子滤波跟踪方法 OpenCV学习笔记(二十三)——OpenCV的GUI之凤凰涅槃Qt OpenCV学习笔记(二十

    OpenCV学习笔记(二十一)--绘图函数core 在图像中,我们经常想要在图像中做一些标识记号,这就需要绘图函数.OpenCV虽然没有太优秀的GUI,但在绘图方面还是做得很完整的.这里就介绍一下相关 ...

  8. 【OpenCV 例程200篇】17. 两张图像的渐变切换

    [OpenCV 例程200篇]17. 两张图像的渐变切换 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 函数 cv2 ...

  9. 《学习OpenCV3》第2章 OpenCV初探

    学习OpenCV系列博客 上一章: OpenCV的下载和配置的文章已经很多了,所以我没写.就是懒! 下一章: 了解OpenCV的数据类型 <学习OpenCV3>第2章 OpenCV初探 1 ...

最新文章

  1. 用链表生成前序二叉树
  2. windows 下更新 npm 和 node
  3. 【AWSL】之Linux管理(RPM)程序
  4. 人员梯度培养_干部梯队培养方案
  5. gulp 实现sass自动化 ,监听同步
  6. NOI入门级:基础算法 贪心法
  7. vSAN 内存或 SSD 拥堵已达到阈值限制 (2071384)
  8. matlab feedforward,Matlab BP神经网络工具箱之feedforwardnet使用小结
  9. 看完微软大神写的 求平均值代码,我意识到自己还是 too young 了
  10. 奇迹1.03H服务端开服架设文件Data文件详解
  11. 计算bed区间gc含量,碱基深度等
  12. php隐藏notice错误,php屏蔽notice错误
  13. 256K,320K及以上Nero AAC,QAAC,FAAC,MP3,OGG等主流有损音频格式横评
  14. html5绘制火柴棒人物
  15. js实现flappybird解析
  16. HM-3200: Tetramesh(四面体网格)
  17. 逻辑回归的参数计算:牛顿法,梯度下降法,随机梯度下降法
  18. el-dialog组件实现可以拖拽移动功能
  19. 「Gitea篇」如何用Git平台账号登录建木CI
  20. 青藤《关键信息基础设施增强保护安全实践》论文入选中国科技核心期刊

热门文章

  1. Qt5开发学习之模型/视图结构(十)
  2. 遍历数组的方法和数组的遍历方法(3+10种)(下)
  3. hp服务器装Ubuntu8系统,Ubuntu 8.10下安装HP LaserJet 1018 USB Printer
  4. 计算机新设用户名后原来用户资料怎么找,资料软件常见问题
  5. sqlserver常用语法大全
  6. 计算机中cmd的指令如何停下,怎么样用CMD命令实现电脑倒计时和快捷键关机操作...
  7. 白话机器学习-用白话的方式通俗易懂的学习机器学习算法
  8. 云桌面与PC之间,优先选谁?
  9. 数天数-可用字典 (20 分) C语言
  10. 【实用教程】场景模式详细讲解