最近,在构思一篇文章,要用fake image的方法,突然想到了以前学到的泊松融合方法。
参考文献:https://zhuanlan.zhihu.com/p/96777721?utm_id=0
https://blog.csdn.net/TracelessLe/article/details/113270697
该方法就是在泊松边界(目标图像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(); }
标签:泊松,Mat,mask,融合,图像,imgR,无缝 From: https://www.cnblogs.com/xmds/p/17921706.html