本博客讲解形态雪中的膨胀和腐蚀操作。使用的函数为:
        cv::erode

cv::dilate

形态学操作

简而言之:一组基于形状的图像处理的操作。形态学运算对输入图像应用astructuring元素生成一个输出图像。
最基本的形态操作是两个:腐蚀和膨胀。他们有一个广泛的用途,即:

  • 去除噪声
  • 单个元素的分离和图像中的分离元素的连接
  • 发现图像中的强度颠簸或空洞

我们将简要地解释扩张和侵蚀,使用下面的图像作为一个例子:

Dilation

  • 该操作由卷积图像 A 和某个卷积核 ( B)的卷积完成,卷积核可以有任何形状或大小,通常是一个方形或圆形.
  • 卷积核 B 有一个定义的锚定点( anchor point), 通常是内核的中心.
  • 随着卷积核 B 扫过图像, 我们计算由卷积核 B 覆盖的的像素的最大值,并用该最大值替换在锚定点位置的图像像素。 可以推断,这种最大化的操作使图像内明亮区域“生长”(也就是所谓的膨胀)。以上面的图片为例。应用扩张,我们可以得到:

围绕黑色字母区域的背景 (亮的区域) 的膨胀

Erosion

这个操作是在内核重叠区域上计算一个局部最小值.

随着卷积核B 扫过图像, 计算有卷积核 B 覆盖部分像素的最小值,并用最小值替换在锚定点的图像像素.

和dilation的例子一样,我们可以对原始图像应用腐蚀算子。你可以看到在下面的结果,图像的明亮区域(背景,显然的),变得更薄,而黑暗的区域(“书写”部分)变得更大。

/*** @file Morphology_1.cpp* @brief Erosion and Dilation sample code* @author OpenCV team*/#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"using namespace cv;/// Global variables
Mat src, erosion_dst, dilation_dst;int erosion_elem = 0;
int erosion_size = 0;
int dilation_elem = 0;
int dilation_size = 0;
int const max_elem = 2;
int const max_kernel_size = 21;/** Function Headers */
void Erosion( int, void* );
void Dilation( int, void* );/*** @function main*/
int main( int, char** argv )
{/// Load an imagesrc = imread( argv[1], IMREAD_COLOR );if( src.empty() ){ return -1; }/// Create windowsnamedWindow( "Erosion Demo", WINDOW_AUTOSIZE );namedWindow( "Dilation Demo", WINDOW_AUTOSIZE );moveWindow( "Dilation Demo", src.cols, 0 );/// Create Erosion TrackbarcreateTrackbar( "Element:\n 0: Rect \n 1: Cross \n 2: Ellipse", "Erosion Demo",&erosion_elem, max_elem,Erosion );createTrackbar( "Kernel size:\n 2n +1", "Erosion Demo",&erosion_size, max_kernel_size,Erosion );/// Create Dilation TrackbarcreateTrackbar( "Element:\n 0: Rect \n 1: Cross \n 2: Ellipse", "Dilation Demo",&dilation_elem, max_elem,Dilation );createTrackbar( "Kernel size:\n 2n +1", "Dilation Demo",&dilation_size, max_kernel_size,Dilation );/// Default startErosion( 0, 0 );Dilation( 0, 0 );waitKey(0);return 0;
}//![腐蚀]
/*** @function Erosion*/
void Erosion( int, void* )
{int erosion_type = 0;if( erosion_elem == 0 ){ erosion_type = MORPH_RECT; }else if( erosion_elem == 1 ){ erosion_type = MORPH_CROSS; }else if( erosion_elem == 2) { erosion_type = MORPH_ELLIPSE; }//![kernel]Mat element = getStructuringElement( erosion_type,Size( 2*erosion_size + 1, 2*erosion_size+1 ),Point( erosion_size, erosion_size ) );//![kernel]/// Apply the erosion operationerode( src, erosion_dst, element );imshow( "Erosion Demo", erosion_dst );
}
//![腐蚀]//![<span>膨胀</span>]
/*** @function Dilation*/
void Dilation( int, void* )
{int dilation_type = 0;if( dilation_elem == 0 ){ dilation_type = MORPH_RECT; }else if( dilation_elem == 1 ){ dilation_type = MORPH_CROSS; }else if( dilation_elem == 2) { dilation_type = MORPH_ELLIPSE; }Mat element = getStructuringElement( dilation_type,Size( 2*dilation_size + 1, 2*dilation_size+1 ),Point( dilation_size, dilation_size ) );/// Apply the dilation operationdilate( src, dilation_dst, element );imshow( "Dilation Demo", dilation_dst );
}
//![<span>膨胀</span>]

例子

基于OpenCV的膨胀和腐蚀相关推荐

  1. opencv之膨胀、腐蚀

    1 膨胀 功能 寻找图像中的局部极大值,将图像中的高亮区域进行扩张,运行出来的结果比原图的高亮区域更多. 参数 src: 输入矩阵 kernel: 卷积核 dts: 输出矩阵 anchor: 卷积核矩 ...

  2. OpenCV中膨胀和腐蚀结构元素的创建

    CreateStructuringElementEx:IplConvKernel* cvCreateStructuringElementEx( int cols, int rows, int anch ...

  3. opencv 实现图像形态学操作 膨胀和腐蚀 开闭运算 形态学梯度 顶帽和黑帽

    图像膨胀和腐蚀 图解 原理及python实现 更多内容:图像膨胀和腐蚀原理及python实现 opencv中膨胀和腐蚀函数 dilation = cv.dilate(img, kernel) # 膨胀 ...

  4. OpenCV(六)形态学操作1--基础:膨胀与腐蚀(回调函数)

    目录 形态学通用API:morphologyEx 一.基础理论 1.邻接关系 (1)四邻接: (2)D邻接: (3) 八邻接: 2.连通性 (1)四连通: (2)八连通: (3)m连通: 3.形态学基 ...

  5. opencv进阶学习笔记13:图像形态学操作大全(膨胀,腐蚀,开闭,黑帽,顶帽,梯度)python版

    基础版学习笔记: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版形态学: opencv学 ...

  6. 【图像处理】——Python OpenCV实现形态学膨胀、腐蚀开闭操作(可以用于图像滤波、图像分割等)

    转载博客请注明详细地址,谢谢 本文讲了形态学基本操作膨胀腐蚀开闭操作的原理 本文讲解了用OpenCV-Python实现形态学操作 目录 一.形态学简述 1.简介 2.一些基本定义 3.结构元素 (1) ...

  7. 【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/23710721 作者:毛星云(浅墨) ...

  8. 转:【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/23710721 作者:毛星云(浅墨) ...

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

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

最新文章

  1. 如何设计一款地震高岗一派溪山千古秀的反爬虫?
  2. 安全之美(英文影印版)
  3. 用计算机算出90除以6.28,用计算器计算:sin51°30′+ cos49°50′-tan46°10′的值是 .——青夏教育精英家教网——...
  4. 集合框架(泛型概述和基本使用)
  5. JS与flash交互通信控制的方法
  6. oracle 监听 无法连接,解决ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务...
  7. python partial_Python--并行计算框架(pathos)
  8. rust蓝卡怎么开_Rust娘个人资料简介,角色作品介绍
  9. 人类和编译器谁编写的代码更快?你们的答案也许都是错的
  10. 蓝桥杯 ALGO-70 算法训练 最长字符串
  11. php汉字组合算法,php数字转汉字的函数算法
  12. Qt样式表Qss(什么是QSS;基本语法;setStyleSheet函数;样式表的属性值;利用QtCreate实现样式切换;样式表实现皮肤改变实例)
  13. android10 文件系统,文件系统之争:为什么三星Galaxy Note 10采用了F2FS文件系统?...
  14. php对接V免签支付教程_Thinkphp开源版v免签支付系统支付宝/微信_免签约收款回调...
  15. 【Cubase11】音乐工作站:宿主软件 - 基础入门笔记
  16. html修改img图片颜色,html中img图片设置透明度的方法
  17. CodeForces - 1152 B. Neko Performs Cat Furrier Transform
  18. Vulnhub_Noob
  19. 2020年新年新气象
  20. 腾讯广点通广告投放-Web转化数据API自归因文档对接

热门文章

  1. 职业生涯又一个转折点
  2. 12个球问题--微软面试题
  3. OpenCV的示例程序在哪里?
  4. iar升级芯片库_IAR 发布支持ARM Cortex系列的开发工具包
  5. python 数据库的Connection、Cursor两大对象
  6. 根据id去重_Person Re-ID研究综述
  7. python调用gitlab api自动合并分支_Python3 如何使用 GitLab API 进行批量的合并分支
  8. python类私有函数_python-面向对象-14-私有方法
  9. IIS部署asp.net core webapi
  10. Matlab学习笔记(三)