Opencv中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的区域则保持不变。

 

posted @ 2018-02-06 08:49  凤凰_1  阅读(27661)  评论(5编辑  收藏  举报