绪:我们在使用opencv库处理图像过程中,经常遇到mask;mask只知道是掩膜、掩码;那么mask的作用到底是什么呢?本文主要介绍mask的意义和用途。
工具/原料
OpenCV2410
方法/步骤
1、先看一个示例:对图像中的指定区域提取;代码如下:#坡纠课柩include<opencv2\opencv.hpp>稆糨孝汶;#include<opencv2\highgui\highgui.hpp>#include<opencv2\features2d\features2d.hpp>#include<opencv2\core\core.hpp>usingnamespacestd;usingnamespacecv;intmain(){Matimage,mask;Rectr1(172,60,74,214);//感兴趣区域image=imread("1.jpg");mask=Mat::zeros(image.size(),CV_8UC1);mask(r1).setTo(255);//二值图Matimg1,img2,img3,img4;img1=image(r1);image.copyTo(img2,mask);image.copyTo(img3);img3.setTo(0,mask);imshow("Imagesequence",image);imshow("img1",img1);imshow("img2",img2);imshow("img3",img3);imshow("mask",mask);waitKey();return0;}结果如下如所示:
2、解释:在程序中这两句关于mask的操作:mask=Mat::zeros(image.size(),CV_8UC1);mask(r1).setTo(255);//r1是设置好的感兴趣区域首先建立一幅大小和原图一样的mask图像,其像素初始为0;即全黑图像;然后将mask图像中的r1区域所有像素设置为255;如下图所示:
3、image.copyTo(img2,mask);表示将原图像拷贝到img2上,mask掩膜的作用是仅允许原图像固定区域的像素执行拷贝操作;结果如图所示:
4、mask掩膜的实质:原图image与掩膜mask进行与运输得到了结果图image;何为图与掩膜的与运算?其实就是图像中每个像素和掩膜中每个对应像素进行与运行;如:1&1=1;1&0=0;又如:一个3*3的图像与3*3的掩膜进行运算,如下所示:
5、mask意义:mask位图,苴煜塑桠来选择哪个像素允许拷贝,哪个像素不允许拷贝。如果mask像素的值是非0的,我就拷贝它,否则不拷贝。因为我们上面得瘌豚胛瑗到的mask中,感兴趣的区域是白色的,表明感兴趣区域的像素都是非0,而非感兴趣区域都是黑色,表明那些区域的像素都是0。一旦原图与mask图进行与运算后,得到的结果图只留下原始图感兴趣区域的图像了。也正如下图所示。
6、总结:mask掩膜,来选择哪个像素允许拷贝,哪个像素不允许拷贝;如果mask像素的值是非0的,就允许操作,否则不允许操作;掩膜运算:其实就是图像中每个像素和掩膜中每个对应像素进行与运行;