opencv中copyTo函式的使用
我們已經知道的是,使用copyTo函式可以得到一個複製的矩陣。
A.copyTo(B);
就可以得到和A一毛一樣的矩陣B。當然需要事先宣告B。並且兩者可以互不相關的做各種操作。
copyTo還有一個重構函式copyTo(B,MASK)。意思是可以得到一個附加掩膜MASK的矩陣B。我們從影象的角度來看這個函式的作用。
首先需要生成一張掩膜MASK,一般情況下這個膜和你需要操作的物件影象一樣大。生成方法見下面例子:
Mat MASK(A.rows,A.cols,CV_8UC3,Scalar(0,0,0));//生成一個三通道的彩色掩膜,初始化為黑色。
Mat MASK(A.rows,A.cols,CV_8UC1Mat MASK=Mat::zeros(A.size( ), CV_8UC3);//生成一個三通道的彩色掩膜,初始化為黑色。需要改成灰度的只需把CV_8UC3改為CV_8UC1。
對一幅圖加一個掩膜顧名思義,就是想要蓋住圖片的某一部分。所以使用A.copyTo(B,MASK)之後得到的是A被MASK掩蓋後的影象。因為初始化的掩膜時黑色的,如果直接加上去整個圖片都會被掩蓋了,所以需要把一部分你不想蓋住的位置改成別的顏色。這裡就可以用到前面的設定ROI的演算法。
Mat mm=mask(Rect(0,0,mask.cols/2,mask.rows
mm={Scalar(255,255,255)};//把ROI中的畫素值改為白色。
得到的掩膜效果如下圖:
對於灰度影象,掩蓋後在影象中掩膜中所有畫素值對應為0的點變為黑色(被掩蓋),其他點(所有非0值)和原來一致。
對於三通道彩色影象,某個通道中所有在掩膜中值為0的點在該通道上的畫素值變為0,其他所有非0值保持和原來不變。例如當對綠色和藍色通道加掩膜時會呈現一種影象被蓋了一層紅色的效果。(因為藍色和綠色被掩蓋了)
不管是灰度影象還是彩色影象,只有掩膜中畫素值為0的點會對影象產生掩蓋效果。
以下分別是黑色掩膜,紅色掩膜的效果圖: