腐蚀与膨胀是最基本的形态学操作,它们能够实现多种多样的功能,主要如下:
1) 消除噪声
2) 分割出独立的图像元素,在图像中连接相邻的元素
3) 寻找图像中的明显的极大值区域或极小值区域
4) 求出图像的梯度
膨胀是求局部最大值的操作。本质上就是将图像A与核B进行卷积。
腐蚀和膨胀相反,是求局部最小值。它也是需要图像A与核B进行卷积。
Opencv3.2.0实现膨胀的函数:Imgproc.dilate(Mat src, Mat dst, Mat kernel, Point anchor, int iterations, int borderType, Scalar borderValue)
参数说明:
src:源图像
dst:目标图像
kernel:膨胀操作的核,当为Null时,表示的是使用参考点位于中心的3x3的核。我们一般使用getStructuringElement配合这个参数使用。
anchor:锚的位置,默认值为(-1,-1),表示锚位于中心
iterations:迭代使用膨胀的次数,默认为1
borderType:推断外部像素的某种边界模式,默认值为BORDER_DEFAULT
borderValue:当边界为常数时的边界值,有默认值,一般不去管它。
Opencv3.2.0中实现腐蚀的函数:Imgproc.erode(Mat src, Mat dst, Mat kernel, Point anchor, int iterations, int borderType, Scalar borderValue)
参数说明:
src:源图像
dst:目标图像
kernel:膨胀操作的核,当为Null时,表示的是使用参考点位于中心的3x3的核。我们一般使用getStructuringElement配合这个参数使用。
anchor:锚的位置,默认值为(-1,-1),表示锚位于中心
iterations:迭代使用膨胀的次数,默认为1
borderType:推断外部像素的某种边界模式,默认值为BORDER_DEFAULT
borderValue:当边界为常数时的边界值,有默认值,一般不去管它。
函数Imgproc.getStructuringElement(int shape, Size ksize, Point anchor)会返回指定形状或尺寸的内核矩阵。参数shape在opencv3.2.0中有多达11种取值,这里给出三种:Imgproc.MORPH_RECT(矩形)、Imgproc.MORPH_CROSS(交叉形)、Imgproc.MORPH_ELLIPSE(椭圆形)。ksize和anchor分别代表内核的尺寸和锚点位置。
例子:
public static void main(String[] args) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat srcImage = Imgcodecs.imread("F:\\t01315b7884a7f706bd.jpg");
Mat dilateImage = srcImage.clone();
Mat erodeImage = srcImage.clone();
Mat element = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3,3));
//膨胀
Imgproc.dilate(srcImage, dilateImage, element, new Point(-1, -1), 1);
//腐蚀
Imgproc.erode(srcImage, erodeImage, element, new Point(-1, -1), 1);
Imgcodecs.imwrite("F:\\dilateImage.jpg", dilateImage);
Imgcodecs.imwrite("F:\\erodeImage.jpg", erodeImage);
}
源图像:
膨胀图像:
腐蚀图像:
转载自原文链接, 如需删除请联系管理员。
原文链接:Java+opencv3.2.0之膨胀与腐蚀,转载请注明来源!