opencv-dilate膨脹


使用一個指定的核元素去膨脹一個圖像,圖像膨脹的過程類似於一個卷積的過程,源圖像矩陣A 以及結構元素B,B在A矩陣上依次移動,每個位置上B所覆蓋元素的最大值替換B的中心位置值(即錨點處),完成整個膨脹的過程

注意:所謂的腐蝕與膨脹的對象是針對圖像中的白色元素所說的

算法通俗理解:膨脹算法使圖像擴大一圈,給圖像中的對象邊界添加像素,其運算過程就是用3X3的結構元素,掃描二值圖像的每一個像素,用結構元素與其覆蓋的二值圖像做“與”運算,如果都為0,結構圖像的該像素為0,否則為1。結果就是使二值圖像擴大一圈

函數使用一個指定的核元素去膨脹源圖像,內核有一個可定義的 錨點,我們叫他內核中心點,膨脹操作時,獲取內核覆蓋區域最大像素值,並代替錨點的像素,最大值通過以下公式獲取:

 

 函數支持就地模式,膨脹操作可以迭加使用多次,在多通道圖像的情況下,每個通道獨立處理

#include<opencv2/opencv.hpp>
#include<iostream>

int main(int argc, char** argv) {

    cv::Mat src= cv::imread("D:/bb/tu/1.jpg");

    cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3));

    cv::Mat dst;
    cv::dilate(src, dst, element);
    /*
    參數1:src輸入圖,可以多通道,深度可為CV_8U、CV_16U、CV_16S、CV_32F或CV_64F
    參數2:dst:輸出圖,和輸入圖尺寸、型態相同
    參數3:kernel:結構元素,如果kernel=Mat()則為預設的3×3矩形,可以使用getStructuringElement()
    參數4:anchor:原點位置,預設為結構元素的中央
    參數5:iterations:執行次數,預設為1次,執行越多次侵蝕效果越明顯
    */
    
    cv::imshow("src", src);
    cv::imshow("dst", dst);

    cv::waitKey(0);
    return 0;
}

 

 白色部分膨脹了,其它部分縮小了

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM