掩码mask实质上是保护区域,其黑色区不进行cv::copyTo
和cv::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;
}