opencv金字塔图像融合

Katherine_0214 2017-03-09 12:28:41
我用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;
}
...全文
1133 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
沉年半 2018-10-26
  • 打赏
  • 举报
回复
应该是你只用了拉普拉斯金字塔的内容,作差的得到的拉普拉斯金字塔是暗的,需要加上原来的低频信息,具体可以参考https://blog.csdn.net/weixin_40614231/article/details/83413471
赵4老师 2017-03-09
  • 打赏
  • 举报
回复
建议楼主先编译链接调试OpenCV自带的相关例子程序。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧