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日

相关文章

  • Redis的9种数据类型用法解读

    Redis的9种数据类型用法解读 Redis是一款常用的内存数据库,被广泛应用于实时数据处理、缓存方案、消息队列等场景。Redis不仅提供了丰富的数据结构,还支持多种高级特性和分布式部署模式,能够帮助工程师在不同场景下构建自己的解决方案。 在Redis中,有9种常见的数据类型,分别是: String List Set Sorted Set Hash Bitm…

    人工智能概览 2023年5月25日
    00
  • pytorch构建网络模型的4种方法

    当使用 PyTorch 进行深度学习时,构建网络模型是非常重要的一个环节。下面我们来探讨一下 Pytorch 构建网络模型的四种方法。 方法一:直接继承 nn.Module 类 这是最常用的构建模型的方法。可以创建一个类,继承自 nn.Module 类,并实现他的 forward() 方法。 我们来看一个简单的例子,构建一个具有两个全连接层(linear l…

    人工智能概论 2023年5月25日
    00
  • PyTorch中clone()、detach()及相关扩展详解

    PyTorch中clone()、detach()及相关扩展详解 本文将详细讲解 PyTorch 中的 clone() 和 detach() 两个重要的函数,以及它们的相关扩展。 clone() clone() 是一个非常常用的 PyTorch 函数,它用于创建张量的深度复制。具体来说,clone() 会创建一个与源张量拥有相同数据和属性的张量,但是二者之间只…

    人工智能概论 2023年5月25日
    00
  • Pytorch数据读取与预处理该如何实现

    PyTorch是一个强大的深度学习框架,提供了许多方便的工具来处理大型数据集和创建机器学习模型。在这里,我们将讲解如何使用PyTorch来实现数据读取和预处理。 PyTorch数据读取与预处理攻略 PyTorch数据读取 在我们开始之前,假设我们有一个文件夹,其中包含许多图像(png或jpg格式),这是我们希望用于我们的深度学习模型的数据集。现在我们需要使用…

    人工智能概论 2023年5月25日
    00
  • Python实现对桌面进行实时捕捉画面的方法详解

    下面就为您详细讲解“Python实现对桌面进行实时捕捉画面的方法详解”的完整攻略。 1. 确认环境 在使用Python进行桌面画面捕捉之前,需要确认开发环境是否准备齐全。 首先,需要安装好Python开发环境。可以从官网 https://www.python.org/downloads/ 下载安装Python,建议选择最新的稳定版本,并勾选“Add Pyth…

    人工智能概论 2023年5月25日
    00
  • 关于Torch torchvision Python版本对应关系说明

    关于Torch torchvision Python版本对应关系说明 在使用深度学习框架PyTorch的过程中,我们常常需要安装和使用Torch和torchvision两个库。但是,不同版本的Torch和torchvision可能与不同版本的Python存在兼容性问题,因此需要了解它们之间的对应关系。 Torch和torchvision版本对应关系 在官方文…

    人工智能概览 2023年5月25日
    00
  • 在vscode中安装使用pylint-django插件解决pylint的一些不必要的错误提示

    下面是详细的攻略: 1. 安装pylint-django插件 在vscode中安装插件可以直接在扩展(Extensions)市场搜索pylint-django直接进行安装: 打开VSCode 在侧边栏中选择“扩展” 在搜索框中搜索“pylint-django” 选择“pylint-django”并点击安装 2. 配置.settings.json 为了使pyl…

    人工智能概论 2023年5月25日
    00
  • Pytorch中torch.argmax()函数使用及说明

    以下是关于“Pytorch中torch.argmax()函数使用及说明”的完整攻略。 什么是torch.argmax()函数? torch.argmax()函数是Pytorch中的一个操作,用于在一个张量中找到最大值的索引。这个函数可以用于寻找在某个目标函数下的最优解,或者用于构建预测模型,找到预测结果中的最大概率。 torch.argmax()使用示例 示…

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