泊松融合-无缝融合

最近,在构思一篇文章,要用fake image的方法,突然想到了以前学到的泊松融合方法。

参考文献:https://zhuanlan.zhihu.com/p/96777721?utm_id=0

https://blog.csdn.net/TracelessLe/article/details/113270697

https://www.cs.jhu.edu/~misha/Fall07/Papers/Perez03.pdf

该方法就是在泊松边界(目标图像f与合成图像f*的边界像素值相等)条件下,保持原图像的梯度特征v,和目标图像f进行融合。本质上就是求拉普拉斯方程。

 也就是下面的式子,上三角意为拉普拉斯算子,下三角就是梯度(矢量):

 考虑到目标图像f与原图像的图像矢量v应该尽可能贴近,又可改写为:

最后,贴一份C++的opencv代码:

复制代码
#include <opencv2\opencv.hpp>
 #include <iostream>
 #include <string>
 
 using namespace std;
 using namespace cv;
 
 void main()
 {
     Mat imgL = imread("data/apple.jpg");
     Mat imgR = imread("data/orange.jpg");
 
     int imgH = imgR.rows;
     int imgW = imgR.cols;
     Mat mask = Mat::zeros(imgL.size(), CV_8UC1);
     mask(Rect(,, imgW*0.5, imgH)).setTo();
     cv::imshow("mask", mask);
     Point center(imgW*0.25, imgH*0.5);
 
     Mat blendImg;
     seamlessClone(imgL, imgR, mask, center, blendImg, NORMAL_CLONE);
 
     cv::imshow("blendimg", blendImg);
     waitKey();
 }
复制代码

 

posted @   澳大利亚树袋熊  阅读(94)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示