OpenCV中的图片叠加和变换

1.图片叠加的方法
通过掩膜进行叠加

假定一张图片位背景图片:BK 另外有一张图片是人的照片:PER。
1. 通过读取PER的灰度图来获取PER的掩膜 PER_MASK(掩膜的尺寸和PER的尺寸一样大)
2. 找到在BK需要赋值的位置 通过函数 PER.copyTo(BK_ROI,PER_MASK)。掩膜运算的方法是不对黑色的部分(值为0)进行赋值

通过透明通道进行叠加
  1. 读取PER的透明通道的数据。
  2. 将BK上的每一个像素点和PER的像素点进行运算,运算的规则为 B K = P E R s c a l e + B K ( 1 s c a l e )
    其中 s c a l e = a l p h a / 255
2.透视变换和仿射变换

假定有两幅图片 bk ,fp 有两组点 bk_p,fp_p。

仿射变换
  1. 通过有限点来获取变换矩阵
    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);

猜你喜欢

转载自blog.csdn.net/bookwormsmallman/article/details/82023835
今日推荐