形态学滤波:腐蚀与膨胀(一)
来源:互联网 发布:怎么恢复数据 编辑:程序博客网 时间:2024/05/16 18:56
一、自己使用过的关于二值化、膨胀、腐蚀以及拟合椭圆中心的代码如下:
bool detectEllipse(const Mat &img, vector<RotatedRect> &data){ vector<vector<Point>> contours; vector<Vec4i> hierarchy; ///////STEP1:图像二值化处理 Mat thresholdImg; threshold(img, thresholdImg, 100, 255, 0);///此处阈值的设定如果较小的话,如果噪声添加较大,将影响最终结果。 //////STEP2:图像的形态学处理(腐蚀和膨胀)(开运算:先腐蚀再膨胀) /////STEP2.1:先腐蚀; int dilateKernelSize = 1;///定义膨胀的内核大小 Mat element = getStructuringElement(MORPH_RECT, Size(2 * dilateKernelSize + 1, 2 * dilateKernelSize + 1), Point(-1, -1));///此处的Point(-1,-1)表示锚位于中心,为默认值,可以不写。 Mat erodeImg; erode(thresholdImg, erodeImg, element); //////STEP2.2:再膨胀; Mat dilateImg; dilate(erodeImg, dilateImg, element); //////STEP3:寻找椭圆轮廓 findContours(dilateImg, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_NONE, Point(0, 0)); if (!contours.size()) { return false; } else { ///////STEP4:用椭圆拟合二维点集 for (int i = 0; i < contours.size(); i++) { data.push_back(fitEllipse(contours[i])); } } return true;}
二、关于腐蚀和膨胀,在此做一些浅显的总结。
形态学操作就是基于形状的一系列图像处理操作。OpenCV为进行图像的形态学变换提供了快捷、方便的函数。最基本的形态学操作有两种,分别是:膨胀与腐蚀。
膨胀与腐蚀能实现多种多样的功能,主要如下:
1)消除噪声;
2)分割出独立的图像元素,在图像中连接相邻的元素;
3)寻找图像中的明显的极大值区域或极小值区域;
4)求出图像的梯度。
三、 对于上述代码中所生成的图片,进行一些说明。
二值化后的图片(thresholdImg):
使用imageWatch插件放大后可见其边缘:
内核大小为:
腐蚀后的图片为:
膨胀后的图片为:
注:此处经过二值化后,图像的边缘比较特殊,腐蚀膨胀操作对它影响不大。、
四、接下来谈谈自己对腐蚀膨胀的理解与认知
1) 膨胀与腐蚀是对白色部分(高亮部分)而言的。
膨胀——>膨胀后的图比原图有更大的高亮区域。
腐蚀——>与上述相反。
2)膨胀就是求局部最大值的操作。从数学角度来说,膨胀或者腐蚀操作就是将图像(或图像的一部分区域,称之为A)与核(称之为B)进行卷积。
而腐蚀与膨胀是相反的一对操作,所以腐蚀就是求局部最小值的操作。
核(element )可以是任何形状和大小,它拥有一个单独定义出来的参考点,我们称其为锚点。多数情况下,核是一个小的,中间带有参考点和实心正方形或者圆盘。其实,可以把核视为模板或者掩码。
五、关于OPENCV中的膨胀和腐蚀函数
膨胀:dilate()函数;腐蚀函数:erode()。可以参考opencv documentation中的函数参数进行调用。
值得说一下的是:我们一般使用函数getStructuringElement配合这个参数的使用。
getStructuringElement函数会返回指定形状和尺寸的结构元素(内核矩阵)。其中,getStructuringElement函数的第一个参数表示内核的形状,有如下三种形状可以选择:
1、矩形:MORPH_RECT;
2、交叉形:MORPH_CROSS;
3、椭圆形:MORPH_ELLIPSE。
- 形态学滤波:腐蚀与膨胀(一)
- 形态学:膨胀与腐蚀
- 形态学-膨胀与腐蚀
- 形态学处理(一)膨胀(dilate)与腐蚀(erode)
- 【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀
- 【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀
- 【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀
- 【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀
- 【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀
- OpenCV之十 形态学图像处理(一):膨胀与腐蚀
- 【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀
- 转载:【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀
- 【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀
- 【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀
- 【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀
- 【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀
- 【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀
- 【OpenCV入门教程之十】 形态学图像处理(一):膨胀与腐蚀
- Eclipse 同一个项目,怎么导入呢?
- 待补
- Java学习之环境搭建
- CSDN-markdown编辑器
- 【NOIP2015】Day1T2 信息传递
- 形态学滤波:腐蚀与膨胀(一)
- 分布式系统设计权衡之CAP
- AndroidStudio-Gradle定制多签名多渠道打包
- 【Error】"Unsupported major.minor version 52.0"
- XML在标签下添加节点
- android软件开发之webView.addJavascriptInterface循环渐进【二】
- Android---ThinkPad开启虚拟化增强(VT)
- poj3421(多重集排列,唯一分解定理)
- 坚持#第78天~不赖床不赖床,手机闹铃远离床!