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; }