1.图片叠加的方法
通过掩膜进行叠加
假定一张图片位背景图片:BK 另外有一张图片是人的照片:PER。
1. 通过读取PER的灰度图来获取PER的掩膜 PER_MASK(掩膜的尺寸和PER的尺寸一样大)
2. 找到在BK需要赋值的位置 通过函数 PER.copyTo(BK_ROI,PER_MASK)。掩膜运算的方法是不对黑色的部分(值为0)进行赋值
通过透明通道进行叠加
- 读取PER的透明通道的数据。
- 将BK上的每一个像素点和PER的像素点进行运算,运算的规则为
其中
2.透视变换和仿射变换
假定有两幅图片 bk ,fp 有两组点 bk_p,fp_p。
仿射变换
- 通过有限点来获取变换矩阵
cv::Mat H = cv::getAffineTransform(fp_p,bk_p);
cv::warpAffine(fp, bk_ROI, H, cv::Size(bk_ROI.cols, bk_ROI.rows), cv::INTER_CUBIC);
2.通过图片来获取变换矩阵
cv::Mat H=cv::findTransformECC(fp,bk);
//此处暂且未知 cv::
透视变换
1.通过有限点来获取变换矩阵
//通过点的变换来获取图片的变换
cv::Mat H = cv::getPerspectiveform(fp_p,bk_p);
cv::warpPerspective(fp, bk_ROI, H, cv::Size(bk_ROI.cols, bk_ROI.rows), cv::INTER_CUBIC);
2.通过点级来对已知的点进行变换
//通过已知图片的变换来获取点的变换
Mat H = findHomography(fp,bk,CV_RANSAC);
perspectiveTransform(fp_p,bk_p,H);