首页 » 技术分享 » Java+opencv3.2.0之膨胀与腐蚀

Java+opencv3.2.0之膨胀与腐蚀

 

腐蚀与膨胀是最基本的形态学操作,它们能够实现多种多样的功能,主要如下:
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之膨胀与腐蚀,转载请注明来源!

0