OpenCV源码系列|图像叠加

2022-06-16 15:57:52 浏览数 (1)

周末收到小伙伴来信:

于是总结了几种图像叠加的方法参考学习。

1,copyTo

代码语言:javascript复制
 int main()
{  
  Mat x = imread("1.jpeg");
  Mat y = imread("2.png");
  Mat ROIx = x(Rect(10, 5, y.cols, y.rows));
  y.copyTo(ROIx);
  imshow("x", x);
  waitKey(0);

  mask(x,y);
  
  return 0;
 
}

效果:

2,copyTo(mask)

代码语言:javascript复制
bool mask(Mat srcImage,Mat logoImage)
{
  
    Mat imageROI = srcImage(Rect(10, 5, logoImage.cols,logoImage.rows));

    Mat mask = logoImage;

    logoImage.copyTo(imageROI,mask);

  
    imshow("copyImg",srcImage);
    waitKey(0);

    return true;
}

效果:

3,addWeighted(大小一致)

代码语言:javascript复制

bool addWeightedImg()
{
    //alphaValue的大小就是值越小,第一张图片的参与感就越小,反之则越大,当我设置为0.1的时候就非常不明显了
    double alphaValue = 0.5;
    double betaValue;

    Mat srcImage1, srcImage2, dstImage;

    srcImage1 = imread("../addimg/2.png");
    srcImage2 = imread("../addimg/1.png");

    // --进行图像混合加权操作
    betaValue = (1.0 - alphaValue);
    addWeighted( srcImage1, alphaValue, srcImage2, betaValue, 0.0, dstImage);//必须保证两张图片大小一致

   
    imshow("used",dstImage);
    waitKey(0);

    return true;
}

效果:

4,addWeighted(大小可以不一致,图像淡化)

代码语言:javascript复制
bool addWeightedImg1()
{
    
    Mat srcImage3 = imread("../copyimg/4.jpeg");
    Mat logoImage = imread("../copyimg/1.jpeg");

    Mat imageROI;

    imageROI = srcImage3(Rect(200, 250, logoImage.cols, logoImage.rows));
    
    addWeighted(imageROI, 0.5, logoImage, 0.3, 0., imageROI);//这里会将图像进行淡化操作

    imshow("danhua",srcImage3);
     waitKey(0);

    return true;

}

效果:

0 人点赞