opencv 形態學處理——膨脹
膨脹與腐蝕能實現各種功能:
(1)消除噪聲;
(2)分割出獨立的影象元素,在影象中連線相鄰的元素;
(3)尋找影象中的極大值區域和極小值區域;
(4)求出影象梯度;
膨脹就是求區域性最大值的操作。就是將影象與核進行卷積。
腐蝕和膨脹是對白色部分(高亮部分)而言的,不是黑色部分。膨脹是對影象中高亮部分進行膨脹,效果圖擁有比原圖更大的高亮區域。
腐蝕是對原圖高亮部分的腐蝕,效果圖擁有比原圖更小的高亮區域。
大部分情況中,核是一箇中間帶有參考點的實心正方形或者圓盤。
相關API函式:
膨脹:dilate函式
函式原型:
void dilate(InputArray src,
OutputArray dst,
InputArray kernel,
Point anchor=Point(-1,-1),
int iterations=1,
int borderType=BORDER_CONSTANT,
const Scalar& borderValue=morphologyDefaultBorderValue()
);
引數解析:
第一個引數:InputArray型別的src,源影象,Mat類的物件。
第二個引數:OutputArray型別的dst,目標影象,與源影象有相同的尺寸和型別。
第三個引數:InputArray型別的kernel,膨脹操作的核。當為NULL是,表示使用參考點位於中心3X3的核。
一般與getStructuringElement函式配合使用。函式介紹:http://blog.csdn.net/kksc1099054857/article/details/76569718
第四個引數:Point型別的anchor,錨的位置,有預設值(-1,-1),表示錨的中心。
第五個引數:int型別的iterations,迭代使用dilate()函式的次數,預設值為。
第六個引數:int型別的borderType,用於推斷影象外部畫素的某種邊界模式。
第七個引數:const Scalar&型別的borderValue,當邊界為常數時的邊界值,用預設值morphologyDefaultBorderValue(),一般不去管它。
使用erode函式,使用erode函式,一般只需要填前面三個引數,後面的引數都有預設值,而且會與getStructureElement使用。
下面給出一個例子:
#include "stdafx.h"
#include "opencv2/opencv.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("E:/VS2017Projects/dilate/dilate/3.jpg");
imshow("原圖",img);
Mat element = getStructuringElement(MORPH_RECT, Size(10, 10));
Mat dst;
dilate(img, dst, element);
imshow("膨脹操作", dst);
waitKey(0);
return 0;
}
效果圖: