作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

原理

形态学是图像处理中常见的名词,图像处理的形态学基本属于数学形态学的范畴,是一门建立在格论和拓扑学基础上的图像分析学科。腐蚀操作是其中最基本的一种运算。

简单来说,腐蚀就是通过一个蒙版进行图像像素值的修改。针对某一像素点,以其为中心建立蒙版,蒙版中的最小值赋值给该像素点,这就实现了腐蚀操作;当处理二值化图像时,图像只有0和255的数值,如果某一灰度值为255的点的蒙版中出现了0,则将该点置为0。效果图见下方图1图2。

函数原型

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

参数说明

  1. InputArray类型的src,输入图像,如Mat类型。
  2. OutputArray类型的dst,输出图像。
  3. InputArray类型的kernel,腐蚀操作的内核也就是上面所说的蒙版。为NULL时,默认表示以参考点为中心3*3的核。一般配合函数getStructuringElement使用,该函数可以构造一个指定形状和尺寸的蒙版。
  4. Point类型的anchor,锚点。默认值(-1,-1),表示位于单位中心,一般不用。
  5. int类型的iterations,迭代使用的次数,默认值为1。
  6. int类型的borderType,推断图像外部像素的边界模式,我OpenCV版本的默认值为BORDER_CONSTANT。如果图像边界需要扩展,则不同的模式下所扩展的像素,其生成原则不同。
  7. const Scalar&类型的borderValue,当边界为常数时的边界值,默认值为morphologyDefaultBorderValue()。

测试代码

#include<iostream>
#include<opencv2/opencv.hpp>
#include<ctime>
using namespace std;
using namespace cv;
int main(void)
{cv::Mat test = cv::Mat::zeros(64, 64, CV_8UC1);cv::rectangle(test, cv::Rect(30, 30, 5, 5), 255, -1);cv::Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));cv::Mat result;cv::erode(test, result, element);imshow("original", test);imshow("result", result);waitKey(0);system("pause");return 0;
}

测试效果

图1 待腐蚀目标

图2 腐蚀完成

如上图所示,原先5*5的矩形,我设置了3*3的矩形蒙版,如图1大红框所示,因为红框中有黑点,所以白点置0变黑,而里面的点因为所处蒙版全是255白点,所以不变颜色。

如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

OpenCV-腐蚀cv::erode相关推荐

  1. OpenCV入门系列 —— cv::erode、cv::dilate 图像腐蚀和膨胀

    OpenCV入门系列 -- cv::erode.cv::dilate 图像腐蚀和膨胀 前言 程序说明 输出结果 代码示例 前言 随着工业自动化.智能化的不断推进,机器视觉(2D/3D)在工业领域的应用 ...

  2. OpenCV图像腐蚀函数erode()的使用

    OPenCV版本:4.4 IDE:VS2017 功能描述 通过一个特定的结构元素腐蚀一个图像.图像腐蚀的过程类似于一个卷积的过程,源图像矩阵A以及结构元素B,B在A矩阵上依次移动,每个位置上B所覆盖元 ...

  3. 详解图像形态学操作之图形的腐蚀和膨胀的概念和运算过程,并利用OpenCV的函数erode()和函数dilate()对图像进行腐蚀和膨胀操作

    图像形态学中两种最基本的操作就是对图形的腐蚀和膨胀,可以说,形态学中的中高级操作都是建立在这两种操作之上.通过这两种基本的运算可以去除图像中的噪声,分割出独立的区域或者将两个区域连接在一起. 关于图像 ...

  4. opencv形态学运算:腐蚀(erode)和膨胀(dilate)

    形态学操作就是基于形状的一系列图像处理操作.OpenCV为进行图像的形态学变换提供了快捷.方便的函数.最基本的形态学操作有二种,他们是:膨胀与腐蚀(Dilation与Erosion). 膨胀与腐蚀能实 ...

  5. OpenCV腐蚀和膨胀Eroding and Dilating

    OpenCV腐蚀和膨胀Eroding and Dilating 腐蚀和膨胀Eroding and Dilating 目标 形态运算 膨胀 侵蚀 代码 解释 腐蚀功能 膨胀功能 结果 腐蚀和膨胀Erod ...

  6. Opencv腐蚀操作去除激光反光光斑

    #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #i ...

  7. OpenCV 腐蚀和膨胀

    腐蚀和膨胀是最基本的形态学操作,腐蚀和膨胀都是针对白色部分(高亮部分)而言的. 膨胀就是使图像中高亮部分扩张,效果图拥有比原图更大的高亮区域:腐蚀是原图中的高亮区域被蚕食,效果图拥有比原图更小的高亮区 ...

  8. OpenCV使用cv :: CascadeClassifier类检测视频流中的对象的实例(附完整代码)

    Open使用cv :: CascadeClassifier类检测视频流中的对象的实例 OpenCV使用cv :: CascadeClassifier类检测视频流中的对象的实例 OpenCV使用cv : ...

  9. OpenCV - C++ - cv::Scalar

    OpenCV - C++ - cv::Scalar https://docs.opencv.org/4.2.0/dc/d84/group__core__basic.html typedef Scala ...

最新文章

  1. html style属性
  2. LINUX按照物理地址预取,linux – 如何以编程方式禁用硬件预取?
  3. 网络编程学习笔记(非阻塞connect)
  4. WPF/E 2007年2月CTP发布了
  5. SpringMVC自动将请求参数和入参对象的属性进行一一绑定;要求请求参数的名字和javaBean入参的对象里面的属性名是一样的||员工的增删改查案例
  6. Python基础知识(第六天)
  7. 为什么会出现 java.util.ConcurrentModificationException 异常?
  8. 后端如何收取多个文件_前段文件分片后后端怎么接收
  9. mysql 连接池 数量_mysql合理配置连接池数量
  10. C# DateTime日期格式
  11. python安装matplotlib绘图库
  12. 大前端架构思考与选择
  13. pc机箱 图纸_如何升级到新的PC机箱
  14. 项目实训(一)基于unity的2D多人乱斗闯关游戏设计与开发 unity的下载及了解
  15. 如何将硬盘分区合并不丢失数据,合并两个硬盘分区不删除数据
  16. PAT_乙级_1009_筱筱
  17. html语言怎么换下一行,表格中打字怎么换到下一行
  18. LINUX下磁盘管理的基本流程与相关操作命令
  19. matlab图像增强实验总结,图像处理实验报告
  20. buck电路上下管_Buck电路原理

热门文章

  1. FreeWheel业务系统微服务化过程经验分享
  2. 练手级计算机,快来打怪
  3. 在IT界取得成功应该知道的10件事(ZT)
  4. [转]CMMI 入门 - 基本术语:约束、假设、依赖、风险、承诺
  5. 设计Whats App
  6. 12、图解横向扩容过程,如何超出扩容极限,以及如何提升容错性
  7. predict函数 R_R包randomForest的随机森林回归模型以及对重要变量的选择
  8. java file 方法_JAVA中File的常用方法
  9. python 两个变量同时循环_python基础篇(子非鱼)
  10. python中mean的用法_python 的numpy库中的mean()函数用法介绍