java opencv 基本操作15

本文介绍了OpenCV库中膨胀(dilate)和腐蚀(erode)函数的基本概念,以及形态学变换中的开运算(MORPH_OPEN)、闭运算(MORPH_CLOSE)等在图像处理中的作用,通过实例展示了如何在图像边缘增强和噪声消除中使用这些技术。
摘要由CSDN通过智能技术生成

膨胀dilate与腐蚀erode

    /**膨胀函数dilate,用结构元素的中心点对准当前正在遍历的这个像素,
     * 然后取当前结构元素所覆盖下的原图对应区域内的所有像素的最大值,用这个最大值替换当前像素值,
     * 给图像中的对象边界添加像素,使二值图像扩大一圈可用于减淡图片文字等
     * dilate(
     * Mat src,     --输入图像
     * Mat dst,     --输出图像
     * Mat kernel,   --用于膨胀操作的结构元素,如果取值为Mat(),那么默认使用一个3 x 3 的方形结构元素,可以使用getStructuringElement()来创建结构元素
     * Point anchor = Point(-1,-1),   --结构元素的锚点位置,默认值value(-1,-1)表示锚点位于结构元素中心
     * int iterations = 1,      --膨胀操作被递归执行的次数
     * int borderType = BORDER_CONSTANT,  --推断边缘类型
     * Scalar borderValue   --边缘值
     * );
     *
     * 腐蚀函数erode,腐蚀会把物体的边界腐蚀掉,卷积核沿着图像滑动,如果卷积核对应的原图的所有像素值为1,
     * 那么中心元素就保持原来的值,否则变为零。主要应用在去除白噪声,也可以断开连在一起的物体,可用于加深图片文字等
     * erode(
     * Mat src,   --输入图像
     * Mat dst,    --输出图像
     * Mat kernel,   --结构单元,如果取值为Mat(),那么默认使用一个3 x 3 的方形结构元素
     * Point anchor=Point(-1, -1),  --结构元素的锚点位置,默认值value(-1,-1)表示锚点位于结构元素中心
     * int iterations=1,    --腐蚀操作被递归执行的次数
     * int borderType=BORDER_CONSTANT,  -推断边缘类型
     * Scalar borderValue      --边缘值
     * );
     */
    @Test
    public void testDilate() {

        Mat src = GeneralUtils.converMat("C:\\图片\\test\\0003.jpg");

        Mat dilateMat = new Mat();
        Mat erodeMat = new Mat();

        //定义结构元素5x5大小矩形
        Mat structuringElement = Imgproc.getStructuringElement(Imgproc.MORPH_RECT,new Size(5, 5), new Point(-1, -1));

        //膨胀
        Imgproc.dilate(src, dilateMat, structuringElement, new Point(-1, -1), 1);

        GeneralUtils.saveByteImg(dilateMat, "C:\\图片\\test\\dilateMat.jpg");
        //腐蚀
        Imgproc.erode(src, erodeMat, structuringElement, new Point(-1,-1), 1);

        GeneralUtils.saveByteImg(erodeMat, "C:\\图片\\test\\erodeMat.jpg");
    }

形态学变换 morphologyEx函数

    /**
     * 形态学变换 morphologyEx函数
     * 开运算:MORPH_OPEN
     * 先腐蚀,再膨胀,可清除一些小东西(亮的),放大局部低亮度的区域
     * 闭运算:MORPH_CLOSE
     * 先膨胀,再腐蚀,可清除小黑点
     * 形态学梯度:MORPH_GRADIENT
     * 膨胀图与腐蚀图之差,提取物体边缘
     * 顶帽:MORPH_TOPHAT
     * 原图像-开运算图,突出原图像中比周围亮的区域
     * 黑帽:
     * 闭运算图-原图像,突出原图像中比周围暗的区域
     *morphologyEx(
     * Mat src,     --输入图像
     * Mat dst,     --输出图像
     * int op,      --形态学运算的类型:
     * Mat kernel,    --形态学运算的内核。为NULL,使用参考点位于中心3x3的核
     * Point anchor=Point(-1,-1),  --锚的位置,其有默认值(-1,-1),表示锚位于中心。
     * int iterations=1,     --迭代使用函数的次数,默认值为1。
     * int borderType=BORDER_CONSTANT,    --用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_CONSTANT。
     * Scalar borderValue      --边缘值
     * );
     */
    @Test
    public void TestMorphologyEx() {
        Mat src = GeneralUtils.converMat("C:\\图片\\test\\0003.jpg");

        //二值化
        Mat gray = new Mat();
        Mat binary = new Mat();
        Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);
        Imgproc.GaussianBlur(gray, gray, new Size(5,5), 0, 0);
        Imgproc.adaptiveThreshold(gray, binary, 255, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY, 35, 15);

        //定义结构元素5x5大小矩形
        Mat structuringElement = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(5, 5));

        //开运算
        Mat morphologyMat = new Mat();
        Imgproc.morphologyEx(binary, morphologyMat, Imgproc.MORPH_OPEN, structuringElement);
        GeneralUtils.saveByteImg(morphologyMat, "C:\\图片\\test\\MORPH_OPEN.jpg");

        //闭运算
        Imgproc.morphologyEx(binary, morphologyMat, Imgproc.MORPH_CLOSE, structuringElement);
        GeneralUtils.saveByteImg(morphologyMat, "C:\\图片\\test\\MORPH_CLOSE.jpg");

        //形态学梯度
        Imgproc.morphologyEx(binary, morphologyMat, Imgproc.MORPH_GRADIENT, structuringElement);
        GeneralUtils.saveByteImg(morphologyMat, "C:\\图片\\test\\MORPH_GRADIENT.jpg");

        //顶帽
        Imgproc.morphologyEx(binary, morphologyMat, Imgproc.MORPH_TOPHAT, structuringElement);
        GeneralUtils.saveByteImg(morphologyMat, "C:\\图片\\test\\MORPH_TOPHAT.jpg");

        //黑帽
        Imgproc.morphologyEx(binary, morphologyMat, Imgproc.MORPH_BLACKHAT, structuringElement);
        GeneralUtils.saveByteImg(morphologyMat, "C:\\图片\\test\\MORPH_BLACKHAT.jpg");
    }

《思考中医》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

古智云开

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值