定义感兴趣区域

 

#include "mainwindow.h"

#include <QApplication>
#include "iostream"
#include<opencv2/imgproc/imgproc.hpp>
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace std;
using namespace cv;
 
void add_logo(Mat & image, Mat & logo)
{
    //定义了一个感兴趣区域(ROI), 它是在image图像上坐标为(0,0), 长宽为logo.rows, logo.cols 的矩形;
    //且image_ROI与原图像的对应区域是共享一个内存,所以一切对image_ROI的操作,都是对原图像的操作。
    Mat image_ROI = image( Rect(0, 0, logo.cols, logo.rows) );
    //第二种定义方法:Mat image_ROI = Rect(image, 0, 0, logo.cols, logo.rows) );
 
    //logo.copyTo(image_ROI);
    //addWeighted(image_ROI, 1.0, logo, 0.3, 0. , image_ROI); //相当于image_ROI = image_ROI * 1.0 + logo * 0.3 + 0
}
 
//利用掩模(必须是灰度图)
void add_logo_2(Mat & image, Mat & logo)
{
        //定义了一个感兴趣区域(ROI), 它是在image图像上坐标为(0,0), 长宽为logo.rows, logo.cols 的矩形;
        //且image_ROI与原图像的对应区域是共享一个内存,所以一切对image_ROI的操作,都是对原图像的操作。
        Mat image_ROI = image( Rect(0, 0, logo.cols, logo.rows) );
        //第二种定义方法:Mat image_ROI = Rect(image, 0, 0, logo.cols, logo.rows) );
 
        Mat mask = imread("C:\\Users\\11830\\Desktop\\f.png", 0);//第二个参数 =0 表示返回灰度图
//        namedWindow("xixi");
//        imshow("xixi", mask);
        logo.copyTo(image_ROI, mask);
}
 
int main(int argc, char *argv[])
{
    Mat image = imread("C:\\Users\\11830\\Desktop\\a.jpg");
    if(!image.data)
    {
        cout << "图像读入有误" <<endl;
        return -1;
    }
 
    Mat logo = imread("C:\\Users\\11830\\Desktop\\f.png");
    if(!logo.data)
    {
        cout << "图像读入有误" <<endl;
        return -1;
    }
 
    add_logo_2(image, logo);
 
    namedWindow("logo");
    imshow("logo", image);
 
    waitKey();
    return 0;
}

 

 

 

 

原图像:

 

 

logo:

 

 

 

运行结果:

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值