OpenCV學習-掩膜

掩膜概述

圖像掩膜,用選定的圖像、圖形或物體,對處理的圖像(所有或局部)進行遮擋,來控制圖像處理的區域或處理過程。
掩膜是一種圖像濾鏡的模板,實用掩膜常常處理的是遙感圖像。當提取道路或者河流,或者房屋時,經過一個n*n的矩陣來對圖像進行像素過濾,而後將咱們須要的地物或者標誌突出顯示出來。這個矩陣就是一種掩膜。函數

掩膜做用

①提取感興趣區,用預先製做的感興趣區掩模與待處理圖像相乘,獲得感興趣區圖像,感興趣區內圖像值保持不變,而區外圖像值都爲0。
②屏蔽做用,用掩模對圖像上某些區域做屏蔽,使其不參加處理或不參加處理參數的計算,或僅對屏蔽區做處理或統計。
③結構特徵提取,用類似性變量或圖像匹配方法檢測和提取圖像中與掩模類似的結構特徵。
④特殊形狀圖像的製做。code

圖像掩膜處理

簡單示例對象

void OpenCVTest2() {
    Mat src,dst;
    src = imread("D:/1.jpg");
    namedWindow("test",CV_WINDOW_AUTOSIZE);
    imshow("test", src);

    int rows = src.rows;
    int cols = (src.cols - 1) * src.channels();
    int offset = src.channels();
    dst = Mat::zeros(src.size(), src.type());
    //掩膜處理原理
    for (int row = 1; row < rows - 1; ++row) {
        const uchar* pre = src.ptr<uchar>(row - 1);
        const uchar* cur = src.ptr<uchar>(row);
        const uchar* next = src.ptr<uchar>(row + 1);
        uchar* dst_cur = dst.ptr<uchar>(row);
        for (int col = offset; col < cols - 1; ++col) {
            dst_cur[col] = saturate_cast<uchar>( 5 * cur[col] - (cur[col - offset] + cur[col + offset] + pre[col] + next[col]));
        }
    }

    //Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);// 定義一個掩膜對象
    //filter2D(src, dst, src.depth(), kernel);//filter2D 就是掩膜處理函數

    namedWindow("output", CV_WINDOW_AUTOSIZE);
    imshow("output", dst);
    waitKey(0);
}
相關文章
相關標籤/搜索