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日

相关文章

  • 微信小程序的运行机制与安全机制解决方案详解

    微信小程序的运行机制和安全机制 微信小程序是一种在微信客户端内运行的应用程序,它是基于微信开放平台提供的 API 和框架进行开发的。微信小程序具有以下的特性: 它可以像普通应用一样被用户安装和打开,但用户不需要下载和安装应用本身,只需要在微信中搜索相应应用即可。 微信小程序运行在微信客户端内,不需要单独安装其他运行环境,例如 Android 系统或 iOS …

    人工智能概论 2023年5月25日
    00
  • centos7如何设置密码规则?centos7设置密码规则的方法

    下面是详细讲解“centos7如何设置密码规则?centos7设置密码规则的方法”的完整攻略。 设置密码规则 CentOS 7使用强密码来保护用户的帐户。在CentOS 7中,通过修改PAM(Pluggable Authentication Modules,可插入身份验证模块)配置文件,可以设置密码规则来确保用户密码的强度。下面是设置密码规则的步骤: 步骤1…

    人工智能概览 2023年5月25日
    00
  • vivo Z5x极光版值得买吗 vivo Z5x极光版开箱体验及评测

    vivo Z5x极光版值得买吗? vivo Z5x极光版是2020年的新品,相比普通版新增了极光色,在外观上非常吸引眼球。其它方面和普通版基本一致,下面分别从外观、性能、拍照和续航4个方面给出评价,帮助大家了解是否值得购买。 外观 vivo Z5x极光版的外观设计采用了极光色,闪耀迷人,非常耐看。背面采用了AG镀膜工艺,手感较为舒适,且能有效防止指纹的留下。…

    人工智能概览 2023年5月25日
    00
  • Django 反向生成url实例详解

    Django 反向生成 URL 实例详解 什么是反向生成 URL? 在 Django 中,URL 一般都是通过 URLconf 文件进行配置的。在编写视图函数时,我们通常需要以字符串的形式构造出 URL,将其嵌入到 HTML 模板中或传递给 HttpResponseRedirect() 函数等。 但是,手动编写这些 URL 是存在一定风险的:一旦 URL 发…

    人工智能概论 2023年5月25日
    00
  • Nginx-rtmp实现直播媒体实时流效果

    Nginx-rtmp实现直播媒体实时流效果攻略 1. 安装Nginx-rtmp模块 在Ubuntu系统上,可以通过以下命令安装Nginx-rtmp模块: sudo apt-get install libnginx-mod-rtmp 2. 配置Nginx-rtmp 在Nginx的配置文件中,添加以下内容: rtmp { server { listen 1935…

    人工智能概览 2023年5月25日
    00
  • Android 应用程序的启动流程示例详解

    下面就让我来详细介绍一下 “Android 应用程序的启动流程示例详解”,包括其流程、示例说明和实现原理等。 1. 流程 Android 应用程序启动的流程大致可以分为以下几个阶段: 系统启动 操作系统首先启动在启动表中的 Init 进程 Init 进程启动 Zygote 进程 Zygote 进程初始化 Dalvik 虚拟机 应用程序启动前的准备工作 找到入…

    人工智能概论 2023年5月25日
    00
  • Serverless 架构如何演进详细介绍

    Serverless 架构是一种基于事件驱动的计算模型,它使开发人员可以编写和部署函数,而不必担心底层的基础设施和服务器管理。相比传统的基础设施,Serverless 更具有弹性和可扩展性。本文将介绍 Serverless 架构的演进历程,以及相关技术和工具的变化。 Serverless 的演进历程 第一阶段:无服务器计算 最初,Serverless 只是一…

    人工智能概览 2023年5月25日
    00
  • opencv实现图像颜色空间转换

    下面就是Opencv实现图像颜色空间转换的完整攻略。 1. 什么是图像颜色空间? 图像颜色空间就是将图像中的像素从一个颜色空间转换到另一个颜色空间的过程。在计算机视觉和图像处理中,常用的颜色空间有RGB、HSV、LAB、YUV等。 2. Opencv实现图像颜色空间转换的函数 Opencv提供了很多函数来完成图像颜色空间转换。常用的函数有: cvtColor…

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