OpenCV图像掩码抠图

掩码mask实质上是保护区域,其黑色区不进行cv::copyTocv::setTo操作

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
 
int main()
{
    Mat image, mask;
    Rect r1(100, 100, 250, 300);
    //设定矩形区域r1,坐标为x=100,y=100,宽250,高300
    Mat img1, img2, img3;
    image = imread("dva.jpg");
    mask = Mat::zeros(image.size(), CV_8UC1);
    //Mat::zeros(size,type)新建一个单通道全黑区域,大小同image
    mask(r1).setTo(255);
    //Mat类(Rec类).setTo(color);将mask区域中Rec区域的颜色转为白色
    img1 = image(r1);
    //将image区域中r1矩形区挖出存到img1
    image.copyTo(img2, mask);
    //将原始图image与掩码mask进行与运算拷贝到目的图img2
    //具体的拷贝方式为:如果掩码中有像素为0,则不拷贝,反之拷贝
    //通常黑底logo可以将自己作为掩码:logo.copyTo(image,logo);
    image.copyTo(img3);
    //将image复制一份给img3
    img3.setTo(0, mask);
    //将img3中mask的非黑色区域置为0(黑色)
 
    imshow("Image sequence", image);
    imshow("img1", img1);
    imshow("img2", img2);
    imshow("img3", img3);
    imshow("mask", mask);
 
    waitKey();
    return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
mask


参考掩码讲解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值