关于opencv中ROI区域的理解

在OpenCV中,图像矩阵用Mat类来进行存储。

Mat类由两部分组成:矩阵头(包括矩阵尺寸、储存方法、存储地址等信息)和一个指向存储像素矩阵的指针(根据存储方法的不同矩阵的维度也会不同)。

Mat的复制拷贝由于Mat的组成亦可分为两中形式:

1.只复制指向原图像矩阵的指针和信息头而不复制图像矩阵;

Mat A, C;// 仅创建信息头部分
    A = imread("1.jpg", CV_LOAD_IMAGE_COLOR);//为矩阵开辟内存,并使A的指针指向该矩阵
    Mat B(A);//使用拷贝构造函数将B的指针指向A指向的矩阵
    C = A;//使用赋值运算符令C的指针与A的指针指向一致

2.复制图像矩阵;

Mat A = imread("1.jpg");
    Mat F = A.clone();
    Mat G;
    A.copyTo(G);

也正是由于Mat的独特构造,我们可以创造指针指向矩阵但信息头只引用部分数据的Mat对象,即感兴趣区域ROI。

我们可以通过划定某图像矩阵的ROI区域,通过只改变该区域像素值的操作实现图像的区域性改变。

Mat srcImage = imread("1.jpg");
    Mat logoImage= imread("2.jpg");
    if(!srcImage.data){printf("读取srcImage错误\n"); return false;}
    if(!logoImage.data){printf("读取logoImage错误\n"); return false;}
    
    // 定义一个Mat类对象并给其设定ROI区域
    Mat ROIImage = srcImage(Rect(200, 250, logoImage.cols, logoImage.rows));
    // 加载ROI区域的掩膜(必须是灰度图)
    Mat mask = imread("logo.jpg", 0);
    //将掩膜复制到对应矩阵的ROI区域
    logoImage.copyTo(ROIImage, mask);
    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值