使用一個指定的核元素去膨脹一個圖像,圖像膨脹的過程類似於一個卷積的過程,源圖像矩陣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; }
白色部分膨脹了,其它部分縮小了