C++ Opencv自写函数实现膨胀腐蚀处理技巧

C++ Opencv自写函数实现膨胀腐蚀处理技巧

什么是膨胀和腐蚀

膨胀腐蚀是由数字图像处理中的形态学图像处理算法中的基本运算,常用于图像的形态学预处理和后处理。膨胀与腐蚀是两种互为逆运算的形态学变换,常常作为一种处理手段被组合应用。

  • 膨胀:将图像中的白色区域(前景色)进行扩张,使上面的白色部分变得更加肥厚。
  • 腐蚀:将图像中的白色区域(前景色)进行蚀刻,让上面白色部分变得更加苗条。

OpenCV中实现膨胀和腐蚀的函数

OpenCV中实现膨胀和腐蚀的函数分别为dilateerode,如下所示:

void dilate(InputArray src, OutputArray dst, InputArray kernel, Point anchor = 
Point(-1,-1), int iterations = 1, int borderType = BORDER_CONSTANT, const 
Scalar& borderValue = morphologyDefaultBorderValue());

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 为关于锚点的卷积核,anchor 为卷积核的锚点位置, iterations 为算法的迭代次数。

自行编写膨胀和腐蚀的处理函数

我们可以自行编写膨胀和腐蚀的处理函数来实现相应的功能。下面是一个简单的实现示例:

void customDilate(const cv::Mat& src, int kernelSize, cv::Mat& dst) {
// 这里假定 kernelSize 是奇数
    int m = (kernelSize - 1) / 2;
    dst = cv::Mat::zeros(src.rows, src.cols, src.type());
    for (int i = m; i < src.rows - m; ++i) {
        for (int j = m; j < src.cols - m; ++j) {
            int max_val = 0;
            for (int k = -m; k <= m; ++k) {
                for (int l = -m; l <= m; ++l) {
                    if (src.at<uchar>(i+k, j+l) > max_val) {
                        max_val = src.at<uchar>(i+k, j+l);
                    }
                }
            }
            dst.at<uchar>(i, j) = max_val;
        }
    }
}

void customErode(const cv::Mat& src, int kernelSize, cv::Mat& dst) {
// 这里假定 kernelSize 是奇数
    int m = (kernelSize - 1) / 2;
    dst = cv::Mat::zeros(src.rows, src.cols, src.type());
    for (int i = m; i < src.rows - m; ++i) {
        for (int j = m; j < src.cols - m; ++j) {
            int min_val = 255;
            for (int k = -m; k <= m; ++k) {
                for (int l = -m; l <= m; ++l) {
                    if (src.at<uchar>(i+k, j+l) < min_val) {
                        min_val = src.at<uchar>(i+k, j+l);
                    }
                }
            }
            dst.at<uchar>(i, j) = min_val;
        }
    }
}

示例 1:使用自行编写的函数实现膨胀和腐蚀

// 读入图像
cv::Mat img = cv::imread("input.jpg", cv::IMREAD_GRAYSCALE);

// 自行编写的函数实现膨胀和腐蚀
cv::Mat dilated, eroded;
int kernelSize = 3;
customDilate(img, kernelSize, dilated);
customErode(img, kernelSize, eroded);

// 显示处理结果
cv::imshow("dilated", dilated);
cv::imshow("eroded", eroded);
cv::waitKey();

示例2:使用OpenCV的 dilateerode 函数实现膨胀和腐蚀

// 读入图像
cv::Mat img = cv::imread("input.jpg", cv::IMREAD_GRAYSCALE);

// 使用OpenCV自带函数实现膨胀和腐蚀
cv::Mat kernel = cv::Mat::ones(3, 3, CV_8UC1);
cv::Mat dilated, eroded;
cv::dilate(img, dilated, kernel);
cv::erode(img, eroded, kernel);

// 显示处理结果
cv::imshow("dilated", dilated);
cv::imshow("eroded", eroded);
cv::waitKey();

以上代码可在OpenCV环境下编译运行并验证其正确性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ Opencv自写函数实现膨胀腐蚀处理技巧 - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • 改进Django中的表单的简单方法

    想要改进Django表单,可以采取以下简单方法: 1. 使用第三方库 Django中有很多第三方库可以帮助我们更方便地创建和处理表单,例如django-crispy-forms、django-bootstrap-form等。这些库提供了丰富的表单布局和样式,能够快速地将表单美化和优化,同时提高表单的可读性。 以django-crispy-forms为例,在安…

    人工智能概论 2023年5月25日
    00
  • windows下Nginx日志处理脚本

    下面是关于“Windows下Nginx日志处理脚本”的详细攻略。 一、背景 Nginx是一款高性能的Web服务器,它能够快速处理大量请求。在开发网站时,我们会使用Nginx来提供网站服务。Nginx会记录访问日志,其中包含了访问者的IP地址、请求的URL、响应状态码等信息。 针对这些Nginx记录的日志信息,我们需要分析日志才能更好地了解网站的访问情况、用户…

    人工智能概览 2023年5月25日
    00
  • C语言实现将字符串转换为数字的方法

    让我来为你讲解“C语言实现将字符串转换为数字的方法”的完整攻略。 背景介绍 在C语言中,我们经常需要将字符串转换为数字,例如把从用户输入的字符串中提取出数字进行计算。而C语言中提供了两种将字符串转化为数字的方法,分别是atoi()和strtol()函数。接下来我将为大家介绍这两种方法及使用示例。 atoi()函数 atoi()函数可以将字符串转化为整数,其函…

    人工智能概览 2023年5月25日
    00
  • python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例

    这里将详细讲解如何使用 Python 中的梯度下降和牛顿法来寻找 Rosenbrock 函数的最小值。先介绍一下 Rosenbrock 函数,它是一个二元函数,公式如下: $$ f(x,y)=(a-x)^2+b(y-x^2)^2$$ 其中 $a=1$,$b=100$。该函数在 $(1,1)$ 处取得最小值 0,但其具有非常强的而且复杂的山峰结构,因此很难找到…

    人工智能概论 2023年5月25日
    00
  • 阿里云申请云盾免费SSL证书(https)

    下面是阿里云申请云盾免费SSL证书的完整攻略: 1. 登陆阿里云控制台 首先,在浏览器中打开阿里云官网,通过登录阿里云账号进入阿里云控制台。 2. 进入SSL证书申请页面 在控制台中,找到云盾的入口,点击进入云盾页面。在左侧导航条中找到“证书管理”,再点击“SSL证书申请”进入申请页面。 3. 创建证书 进入申请页面后,首先选择“免费证书”,然后填写域名,选…

    人工智能概览 2023年5月25日
    00
  • 使用OpenCV实现人脸图像卡通化的示例代码

    使用OpenCV实现人脸图像卡通化的示例代码的实现过程可以分为以下几个步骤: 1. 加载图片 我们首先需要加载图片作为我们要卡通化的对象。通过OpenCV的cv2.imread()函数,我们可以很方便地从磁盘中加载图片,例如: import cv2 # 加载图片 img = cv2.imread("path_to_image") 2. 灰…

    人工智能概论 2023年5月25日
    00
  • Mac系统下搭建Nginx+php-fpm实例讲解

    下面是具体的“Mac系统下搭建Nginx+php-fpm实例讲解”的完整攻略: 步骤1:安装Homebrew Homebrew是Mac OS X下的一款包管理器,我们可以使用它方便地安装和管理各种工具软件,包括Nginx和php。 要安装Homebrew,打开终端,输入以下命令即可: $ /usr/bin/ruby -e "$(curl -fsSL…

    人工智能概览 2023年5月25日
    00
  • Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法

    针对这个问题,我可以提供以下完整攻略: 问题描述 当我们在重装 MySQL 数据库后,重新启动 Django 项目时,可能会出现以下报错信息: ModuleNotFoundError: No module named ‘MySQLdb’ 这说明 Django 没有找到 MySQLdb 模块,导致项目无法启动。因此,需要进行相关配置来解决该问题。 解决方法 方…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部