opencv学习(十一)// ROI // 图像叠加 // 线性混合 // ROI+线性混合

1,选定感兴趣区域ROI,进行图像叠加

这里写图片描述
这里写图片描述

2,线性混合(addWeighted)

这里写图片描述
这里写图片描述

addWeighted()函数

这里写图片描述

效果图

这里写图片描述

3,指定区域ROI+线性混合

效果图(对比1)

这里写图片描述

以上应用实例

#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;


//对全局函数进行声明
//
bool ROI_ADDImage();
bool LinearBlending();
bool ROI_linearBlending();



//主函数
int main()
{
    system("color F");// color of Background of window

    if (ROI_ADDImage()&&LinearBlending()&&ROI_linearBlending())
    {
        printf("sucess!");
        cout << endl << "\n运行成功,得出了需要的图像";//same function with the upper one, to make the window stay
    }


    waitKey(0);
    return 0;
}



//选感兴趣区域ROI,实现图像叠加函数
//
//
bool ROI_ADDImage()
{
    Mat aimag = imread("D://3.jpg");
    Mat logoimag = imread("D://4.jpg");//imread image
    if (!aimag.data)//untersuchen,ob es falsch ist
    {
        printf("aimg is false!\n");
        return 0;
    }
    if (!logoimag.data)
    {
        printf("logoimg is false!\n");
        return 0;
    }
    Mat imageROI = aimag(Rect(20, 0, logoimag.cols, logoimag.rows));//选取ROI区域(位置,大小)
    Mat mask = imread("2.jpg",0);//掩膜(必须为灰度图)
    logoimag.copyTo(imageROI, mask);//将掩膜复制到ROI区域
    namedWindow("use ROI to composition of two images");
    imshow("use ROI to composition of two images", aimag);

    return true;

}


//函数:实现线性图像混合(addWeighted)注意!两幅图尺寸需一致)
//
//
bool LinearBlending()
{
    double alphaValue = 0.5;
    double betaValue;
    Mat img2, img3, bimg;
    img2 = imread("D://mogu.jpg");
    img3 = imread("D://rain.jpg");
    if (!img2.data)//untersuchen,ob es falsch ist
    {
        printf("aimg is false!\n");
        return 0;
    }
    if (!img3.data)
    {
        printf("logoimg is false!\n");
        return 0;
    }
    betaValue = (1 - alphaValue);
    addWeighted(img2, alphaValue, img3, betaValue, 0, bimg);//图像混合加权操作

    imshow("2)before_LinearBlending", img2);
    imshow("3)after_LinearBlending", bimg);

}


//函数;ROI+linearBlending,选定区域+线性混合
//
//
bool ROI_linearBlending()
{
    Mat img4 = imread("D://3.jpg", 1);
    Mat logoimag = imread("D://4.jpg");//imread image
    if (!img4.data)//untersuchen,ob es falsch ist
    {
        printf("aimg4 is false!\n");
        return 0;
    }
    if (!logoimag.data)
    {
        printf("logoimg is false!\n");
        return 0;
    }
    Mat imageROI2;
    imageROI2 = img4(Rect(200, 250, logoimag.cols, logoimag.rows));//选取ROI区域(位置,大小)→→方法二//imageROI=img4(Range(250,250+logoImage.rows),Range(250,250+logoImage.cols));
    addWeighted(imageROI2, 0.5, logoimag, 0.3, 0,imageROI2);
    imshow("4)ROI+Linearblending", img4);
    return true;

}

猜你喜欢

转载自blog.csdn.net/qq_41553038/article/details/79912112
今日推荐