本文主要通过图像金字塔来实现图像融合。
(案例:苹果和橘子的左右融合)
原理
1. 高斯金字塔
高斯金字塔包含了一系列低通滤波器,可以对图像进行下采样(pyrDown)和上采样(pyrUp)
下采样:即缩小图片,会损失图像信息,具体步骤为:
①对图像进行高斯内核卷积
②将所有偶数行和列去除
上采样:即放大图片,具体步骤为:
①将图像在每个方向扩大为原来的两倍,新增的行和列以0填充
②使用先前同样的内核与放大后的图像卷积,获得 “新增像素”的近似值
2. 拉普拉斯金字塔
简单讲就是:原图像-先缩小后放大的图像,可以获得高频信息
具体关于金字塔方面的知识可以参考:一篇很好的入门教程~
3. 案例原理
网上有很多关于这方面的原理,这里就不一一赘述了,大致就是:
高斯金字塔上采样结果(低频信息)+拉普拉斯金字塔(高频信息)
代码
这里有用到以下素材:
mask:
apple:
orange:
#include <iostream>
#include "opencv.hpp"
using namespace cv;
using namespace std;
int main()
{
Mat apple = imread("apple.png", IMREAD_ANYCOLOR); //读入无损源图像
apple.convertTo(apple, CV_32F, 1.0 / 255.0);//进行色彩空间转换 scale=1.0/255.0归一
Mat orange = imread("orange.png", IMREAD_ANYCOLOR);
orange.convertTo(orange, CV_32F, 1.0 / 255.0);
Mat mask = imread("mask.png");
mask.convertTo(mask, CV_32F, 1.0 /