OpenCV贴图源码(c++含解释)

#include<opencv2/opencv.hpp>
#include <iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<string>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
    string a1 , b1 ;
    cin >> a1 >> b1;//读入图片路径
    //读入图像
    Mat srcImage1 = imread(a1);
    Mat logoImage = imread(b1);
    Mat src=srcImage1;
    //判断读入图片是否正常
    if (!srcImage1.data) { printf("background read error \n"); return false; }
    if (!logoImage.data) { printf("logo read error \n"); return false; }
        //判断贴图矩阵相对于背景矩阵是否在右下方出界(出界则裁掉)
        //得到左上坐标
        int a, b, c, d;
        cin >> a >> b;
        //判断右下是否出界
        if (a + logoImage.cols > srcImage1.cols) {//向右出界
            c = srcImage1.cols - a;//裁掉向右出界的贴图横坐标
        }
        else {//向右未出界
            c = logoImage.cols;//横坐标与输入相同
        }
        if (b + logoImage.rows > srcImage1.rows) {//向下出界
            d = srcImage1.rows - b;//裁掉向下出界的贴图横坐标
        }
        else {//向下未出界
            d = logoImage.rows;//纵坐标坐标与输入相同
        }
        
        //在背景中使用ROI剪裁贴图所在位置
        Mat imageROI = srcImage1(Rect(a, b, c, d));
        //剪裁贴图掩膜以匹配背景ROI
        Mat mask= logoImage(Rect(0, 0, c, d));
        //将掩膜覆盖到背景roi上
        mask.copyTo(imageROI, mask);
        //定义窗口
        namedWindow("合成图1");
        //定义窗口的显示为srcImage1
        imshow("合成图1", srcImage1);
        //创建路径
        system("mkdir c:\\save");
        //将贴好的图片保存
        imwrite("C:/save/save.jpg", srcImage1);
        waitKey();
}

input:背景路径 贴图路径 贴图左上角横坐标 贴图左上角纵坐标

然后就是这么简单,解释都写成注释了,如果有不对的请各位大佬帮忙指正下谢谢

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值