准备2副背景图像,注意图像黑色的部分,是作为mask用的,我们会用灰度图的方式打开它们,这时黑色的部分值为0,则图像融合时候,可以把第二幅图像在黑色的部分显示出来。
代码非常简单,注意就是图像copyTo函数的使用,把背景图像copy到前景图像时候,掩码部分不会拷贝。
CImageEffect::CImageEffect(){ backImage = cv::imread("background.png"); if(!backImage.data) QMessageBox::about(NULL, "About Me", "can't open back image!"); maskImg = cv::imread("background.png",0); //注意掩码的部分,要用黑色,这样在图像copy时候,不会copyif(!maskImg.data) QMessageBox::about(NULL, "About Me", "can't oopen back image mask!"); logo1Img = cv::imread("2.png"); //注意掩码的部分,要用黑色,这样在图像copy时候,不会copyif(!logo1Img.data) QMessageBox::about(NULL, "About Me", "can't oopen logo image mask!"); logo1maskImg = cv::imread("2.png",0); //注意掩码的部分,要用黑色,这样在图像copy时候,不会copyif(!logo1maskImg.data) QMessageBox::about(NULL, "About Me", "can't oopen logo mask image mask!"); } void CImageEffect::ImageMerge1(cv::Mat& img, cv::Mat& out){ img.copyTo(out); backImage.copyTo(out, maskImg); cv::Mat imageROI; imageROI = out(cv::Rect(10,10, logo1Img.rows, logo1Img.cols)); logo1Img.copyTo(imageROI, logo1maskImg); }
下面是程序执行后的界面:
时间: 2024-09-19 20:31:15