Skip to content
鼓励作者:欢迎打赏犒劳

图像的形态学

形态学操作 (Morphological Operations)是一种图像处理技术,主要用于二值图像的处理,通常用于 去噪、分离或合并物体、提取图像结构等任务。形态学操作的核心思想是基于图像中像素的形状或结构 进行处理,因此它在边缘检测、物体识别和图像增强等领域中有广泛应用。

常见的形态学操作包括:

  • 1.膨胀(Dilation)
  • 2.腐蚀(Erosion)
  • 3.开运算(Opening)
  • 4.闭运算(Closing)
  • 5.形态学梯度 (Morphological Gradient)
  • 6.顶帽(Top Hat)
  • 7.黑帽(Black Hat)

膨胀

原理

形态学操作一般是基于一个形态学结构元素(structuring element)在图像上进行"滑动窗口”操作。 结构元素通常是一个小的矩阵(如3x3的方形或圆形矩阵),在图像的每个位置上进行相应的计算。

java
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

/**
 * 公众号:干货食堂
 */
public class Test {

    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        //读取图像,使用灰度模式
        Mat src=Imgcodecs.imread("C:\\Users\\Think\\Desktop\\TestCV\\fish.png",Imgcodecs.IMREAD_GRAYSCALE);

        //创建结构元素 (3x3的矩形)
        Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3, 3));
        //创建输出图像
        Mat dst = new Mat();
        //执行膨胀操作
        Imgproc.dilate(src, dst, kernel);
        //保存结果图像
        HighGui.imshow("before Image", src);
        HighGui.imshow("after Image", dst);


        HighGui.waitKey(0);
        HighGui.destroyAllWindows();
    }
}

腐蚀

java
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

/**
 * 公众号:干货食堂
 */
public class Test {

    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        //读取图像,使用灰度模式
        Mat src=Imgcodecs.imread("C:\\Users\\Think\\Desktop\\TestCV\\fish.png",Imgcodecs.IMREAD_GRAYSCALE);

        //创建结构元素 (3x3的矩形)
        Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3, 3));
        //创建输出图像
        Mat dst = new Mat();
        //执行腐蚀操作
        Imgproc.erode(src, dst, kernel);
        //保存结果图像
        HighGui.imshow("before Image", src);
        HighGui.imshow("after Image", dst);


        HighGui.waitKey(0);
        HighGui.destroyAllWindows();
    }
}

如有转载或 CV 的请标注本站原文地址