1. 程式人生 > >OpenCV中copyTo()函式及Mask詳解(附程式碼詳解)

OpenCV中copyTo()函式及Mask詳解(附程式碼詳解)

copyTo函式有兩種重構方式:

第一種:A.copyTo(B),表示將A矩陣複製到B中

第二種:A.copyTo(B, mask),表示得到一個附加掩膜mask的矩陣B。

第一種方法就不多贅述,這裡主要詳細敘述第二種使用方法。 

對於第二種mask引數的格式,A.copyto(B, mask),mask作為一個掩模板,如果在某個畫素點(i, j)其值為1(只看第一通道,所以mask單通道即可),則把A.at(i, j)處的值直接賦給B.at(i, j),如果其值為0則B.at(i, j)處保留其原始畫素值。這樣能夠使得圖示邊緣的顏色和原圖保持一致。

下邊通過例子來說明A.copyTo(B, mask)函式的用法:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

void main(){
    Mat srcImage = imread("1.jpg");
    Mat dstImage = imread("2.jpg");
    imshow("圖1原始圖", srcImage);
    imshow("圖2原始圖", dstImage);

    //建立一個感興趣區域
    Mat imageROI = srcImage(Rect(0,0,dstImage.cols, dstImage.rows));

    //載入掩模板
    Mat mask = imread("2.jpg", 0);
    
    //進行復制
    dstImage.copyTo(imageROI, mask);
    //顯示效果圖
    imshow("效果圖為",srcImage);

    waitKey(0);

}

執行結果: