opencv金字塔图像融合

Katherine_0214 Katherine_0214 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我用opencv写了一段关于金字塔融合算法的程序,目的是将苹果和橘子融合成一幅图片,但是现在运行出来的效果图像很暗,不知道哪里出了问题,希望得到解答,谢谢!
下面是我的代码:
#include<iostream>
#include<opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{
Mat apple = imread("apple.png");
apple.convertTo(apple, CV_32F, 1.0 / 255.0);
Mat orange = imread("orange.png");
orange.convertTo(orange, CV_32F, 1.0 / 255.0);
Mat mask = imread("mask.png");
mask.convertTo(mask, CV_32F, 1.0 / 255.0);

int level = 5;
vector <Mat> apple_LaplacianPyramid;
vector <Mat> orange_LaplacianPyramid;
vector <Mat> GaussianPyramid_mask;

//做苹果的拉普拉斯金字塔
Mat apple1, apple2, apple3;
Mat Lap1;
apple.copyTo(apple1);
for (int i = 0; i<level; i++)
{
pyrDown(apple1, apple2);
pyrUp(apple2, apple3, apple1.size());
Lap1 = apple1 - apple3;
apple_LaplacianPyramid.push_back(Lap1);
apple1 = apple2;
}

//做橘子的拉普拉斯金字塔
Mat orange1, orange2, orange3;
Mat Lap2;
orange.copyTo(orange1);
for (int i = 0; i<level; i++)
{
pyrDown(orange1, orange2);
pyrUp(orange2, orange3, orange1.size());
Lap2 = orange1 - orange3;
orange_LaplacianPyramid.push_back(Lap2);
orange1 = orange2;
}

//求掩膜的高斯金字塔
Mat mask1, mask2;
mask.copyTo(mask1);
GaussianPyramid_mask.push_back(mask);
for (int i = 0; i<level - 1; i++)
{
pyrDown(mask1, mask2);
GaussianPyramid_mask.push_back(mask2);
mask1 = mask2;
}

//将每一层的图像存在vector中
vector<Mat> Fusion;
Mat fusion;
for (int i = 0; i < level; i++)
{
fusion = GaussianPyramid_mask[i].mul(apple_LaplacianPyramid[i]) + (Scalar(1.0, 1.0, 1.0) - GaussianPyramid_mask[i]).mul(orange_LaplacianPyramid[i]);
Fusion.push_back(fusion);
}

//金字塔重建与恢复
Mat orapple = Fusion[4];
for (int l = level - 2; l >= 0; l--)
{
Mat up;
pyrUp(orapple, up, Fusion[l].size());
orapple = up + Fusion[l];
}

imshow("orapple", orapple);


waitKey(0);
return 0;
}
...全文

相关推荐

Opencv图像金字塔融合[代码]

在方法的具体实现部分,文章提供了完整的C++代码示例,这些代码展示了如何利用Opencv库来实现图像金字塔融合。代码中包括了详细的注释,帮助读者理解每一个函数调用和算法步骤的具体作用。

k9l0m1

b.rar_图像融合_图像融合 C_图像融合opencv_拉普拉斯变换_金字塔融合

本项目聚焦于使用OpenCV库,通过C++编程实现图像融合,特别是利用拉普拉斯金字塔变换和金字塔融合方法。下面将详细介绍这些知识点。1.

Jon Sco

多尺度图像融合.7z

综上所述,"多尺度图像融合.7z"项目提供了一个实现多尺度图像融合的示例,通过结合OpenCV和numpy的强大功能,实现了从高斯金字塔和拉普拉斯金字塔的角度对图像进行高效融合,有助于在实际应用中提升图像的分析和理解能力

北比二

基于Python+OpenCv的双图全景拼接,提取图像SIFT特征并进行特征点匹配,计算单应矩阵,由单应矩阵进行透视变换后合并图像 对图像过度部分使用拉普拉斯金字塔的多频带融合,确保平滑(源码+图片)

基于Python+OpenCv的双图全景拼接,提取图像SIFT特征并进行特征点匹配,计算单应矩阵,由单应矩阵进行透视变换后合并图像。对图像过度部分使用拉普拉斯金字塔的多频带融合,确保平滑(源码+图片)

LeonDL168

拉普拉斯金字塔融合

通过这一系列步骤,实现了基于OpenCV的拉普拉斯金字塔融合算法。#### 结论综上所述,拉普拉斯金字塔融合技术通过对输入图像进行多层次分解和融合,有效地实现了图像间的平滑过渡,提高了图像质量。

lj642937499
评论 2
收藏 已收藏
分享
返回顶部