void boxFilter(InputArray src,OutputArray dst, int ddepth, Size ksize, Point anchor=Point(-1,-1), boolnormalize=true, int borderType=BORDER_DEFAULT )
void blur(InputArray src, OutputArraydst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT )
void GaussianBlur(InputArray src,OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, intborderType=BORDER_DEFAULT )
void medianBlur(InputArray src,OutputArray dst, int ksize)
void bilateralFilter(InputArray src, OutputArraydst, int d, double sigmaColor, double sigmaSpace, int borderType=BORDER_DEFAULT)
void dilate(
InputArray src,
OutputArray dst,
InputArray kernel,
Point anchor=Point(-1,-1),
int iterations=1,
int borderType=BORDER_CONSTANT,
const Scalar& borderValue=morphologyDefaultBorderValue()
);
void erode(
InputArray src,
OutputArray dst,
InputArray kernel,
Point anchor=Point(-1,-1),
int iterations=1,
int borderType=BORDER_CONSTANT,
const Scalar& borderValue=morphologyDefaultBorderValue()
);
1 #include <opencv2/core/core.hpp> 2 #include<opencv2/highgui/highgui.hpp> 3 #include"opencv2/imgproc/imgproc.hpp" 4 #include <iostream> 5 using namespace std; 6 using namespace cv; 7 int main() 8 { 9 Mat src = imread("E:/test.jpg"); 10 Mat dst1; 11 Mat dst2; 12 //定义内核 13 Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); 14 dilate(src, dst1, element);//膨胀 15 erode(src, dst2, element);//腐蚀 16 imshow("src", src); 17 imshow("dst1", dst1); 18 imshow("dst2", dst2); 19 waitKey(); 20 return 0; 21 }
void morphologyEx(
InputArray src,
OutputArray dst,
int op,
InputArraykernel,
Pointanchor=Point(-1,-1),
intiterations=1,
intborderType=BORDER_CONSTANT,
constScalar& borderValue=morphologyDefaultBorderValue() );
op选项
MORPH_OPEN – 开运算(Opening operation)
MORPH_CLOSE – 闭运算(Closing operation)
MORPH_GRADIENT -形态学梯度(Morphological gradient)
MORPH_TOPHAT - “顶帽”(“Top hat”)
MORPH_BLACKHAT - “黑帽”(“Black hat“)
开运算可以用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积
1 Mat src = imread("E:/test.jpg"); 2 Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); 3 Mat open; 4 morphologyEx(src, open,MORPH_OPEN, element); 5 imshow("原图", src); 6 imshow("开运算", open);
闭运算能够排除小型黑洞(黑色区域)
1 Mat src = imread("E:/test.jpg"); 2 Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); 3 Mat close; 4 morphologyEx(src, close,MORPH_CLOSE, element); 5 imshow("原图", src); 6 imshow("闭运算", close);
形态学梯度来保留物体的边缘轮廓
1 Mat src = imread("E:/test.jpg"); 2 Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); 3 Mat gradient; 4 morphologyEx(src, gradient, MORPH_GRADIENT, element); 5 imshow("原图", src); 6 imshow("形态学梯度", gradient);
顶帽运算往往用来分离比邻近点亮一些的斑块。当一幅图像具有大幅的背景的时候,而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提取
1 Mat src = imread("E:/test.jpg"); 2 Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); 3 Mat tophat; 4 morphologyEx(src, tophat, MORPH_TOPHAT, element); 5 imshow("原图", src); 6 imshow("顶帽", tophat);
黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域,且这一操作和选择的核的大小相关。
所以,黑帽运算用来分离比邻近点暗一些的斑块
1 Mat src = imread("E:/test.jpg"); 2 Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); 3 Mat blackhat; 4 morphologyEx(src, blackhat, MORPH_BLACKHAT, element); 5 imshow("原图", src); 6 imshow("形态学梯度", blackhat);
原文:https://www.cnblogs.com/sclu/p/11507717.html