65.图像的腐蚀操作

目录

        1 概念讲解及用处

        2 原理

        3 API函数详解

        4 用C++编写代码进行实现

        1 概念讲解及用处

        腐蚀是形态学操作中的一种基本操作,通过结构元素与图像进行最小值运算,将物体边界内部的像素点进行磨损或消除,从而使物体的形状变小且更加平滑。还记得之前讲过的中值滤波吗,其实腐蚀操作可以看作是最小值滤波,对于结构元素下的图像的像素值进行排序,将中心像素替换为最小值。

        腐蚀的作用: 腐蚀类似 '领域被蚕食' ,将图像中的高亮区域或白色部分进行缩减细化,其运行结果图比原图的高亮区域更小.。 图像被腐蚀后,去除了噪声,但是会压缩图像。 对腐蚀过的图像,进行膨胀处理,可以去除噪声,并且保持原有形状。

        2 原理

        以下图为例,取一个3×3的正方形核,锚点就是正方形核的中心点,假设我们有下图中这个灰度图像矩阵:

         图中黄色区域,由于其中的最小值为1,所以其锚点处(红色数字)为1。依次进行滑动窗口的移动,先向右再向下,直到所有元素都被替换掉。

        3 API函数详解

        在OpenCV中,可以通过erode()函数来实现图像的腐蚀操作。函数的定义如下:

void erode(InputArray src, OutputArray dst, InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType=BORDER_CONSTANT,
const Scalar& borderValue= morphologyDefaultBorderValue())
函数参数的含义:
src  --  输入图像
dst  --  目标图像
kernel  --  腐蚀核(使用Mat或getStructuringElement创建)
anchor  --  锚点在元素中的位置,默认值(-1,-1)代表锚点在正中心
iterations  --  腐蚀次数
borderType  --  像素外推方式
borderValue  --  恒定边框时的边框值

        4 用C++编写代码进行实现

        下面是使用OpenCV库在C++中实现图像腐蚀操作的示例代码:

#include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
    Mat srcImage = imread("input.jpg", IMREAD_GRAYSCALE);
    if (srcImage.empty())
    {
        printf("Failed to load image\n");
        return -1;
    }

    Mat dstImage;
    Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3)); // 定义3x3的矩形结构元素

    erode(srcImage, dstImage, kernel);

    imshow("Source Image", srcImage);
    imshow("Eroded Image", dstImage);
    waitKey(0);

    return 0;
}

        在代码中,首先加载输入图像srcImage,然后定义了一个3x3的矩形结构元素kernel。接下来,使用erode()函数对图像进行腐蚀操作,并将结果保存在dstImage中。最后,显示原始图像和腐蚀后的图像,并等待按键退出程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

别叭叭儿—好好学

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

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

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

打赏作者

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

抵扣说明:

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

余额充值