copyto
在Mat矩阵类的成员函数中copyto(roi , mask)函数是非常有用的一个函数,尤其是后面的mask可以实现蒙版的功能,我们用几个实例来说明它的作用。我们要注意mask的数据类型,必须是CV_8U,且通道数或者是1,或者与roi一致。
首先我们令mask为尺寸与roi一致的1矩阵:
int main()
{
Mat img1=imread("D:/CodeWork/MyImage/baboon.jpg",0);
Mat img2=imread("D:/CodeWork/MyImage/linux.jpg",0);
imshow("initial img1",img1);
Mat roi=img1(Rect(0,0,img2.cols,img2.rows));
//分别令像素值为1、0,以及令mask=img2.clone();观察输出结果
Mat mask(roi.rows,roi.cols,roi.depth(),Scalar(1));
img2.copyTo(roi,mask);
imshow("logan img2",img2);
imshow("after mask img1",img1);
waitKey();
return 0;
}
运行结果如下:
接下来,我们令mask=0,观察输出结果如下,很明显mask为0的区域并没有被替换成img2图像:
再接下来,我们将mask直接等于img2图像,看看会怎么样?在mask中,非0区域的图像被保留下来,而像素值为0的区域则保持不变。