opencv-erode侵蝕

注意:所谓的腐蚀与膨胀的对象是针对图像中的白色元素所说的

侵蝕顧名思義就是消融物體的邊界,如果物體大於結構元素,侵蝕的結果是讓物體瘦一圈,而
這一圈的寬度是由結構元素大小決定的,如果物體小於結構元素,則侵蝕後物體會消失,如果
物體之間有小於結構元素的細小連通,侵蝕後會分裂成兩個物體
對於集合I和H,假設使用H對I進行侵蝕,
操作上我們把H當作結構元素,H在整個影像平面上移動,當H的原點平移到物體上某位置時,如
果此時H能完全包覆於物體I中,就紀錄物體此點位置,所有這樣的像素位置集合,即為侵蝕後
的物體,H的原點位置使用者自行設計,通常都為中央
假設H長、寬皆為d,對物體(I)進行侵蝕,侵蝕後物體(I)四周皆縮水d/2的寬度
假設H長、寬皆為d,物體高度d,侵蝕後物體成為一條線

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

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

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

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

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

引用一:提取边界 

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


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

    cv::Mat src = cv::imread("D:/bb/tu/5.png");
    cv::imshow("原图", src);
    cv::Mat gray,dst,dst1,dst2;
    cvtColor(src, gray, cv::COLOR_BGR2GRAY);
    cv::threshold(gray, dst, 150, 255, 0);
    cv::erode(dst, dst1, cv::Mat(), cv::Point(-1, -1), 1); //侵蝕
    dst2 = dst - dst1;  //通过相减,提取边界

    cv::imshow("dst2", dst2);
        
    cv::waitKey(0);
    return 0;
}

 

 

 

 

 

 

 

 

 

 

posted @ 2021-12-14 09:22  天子骄龙  阅读(157)  评论(0编辑  收藏  举报