ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:1.02MB ,
资源ID:11094530      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11094530.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(OpenCV图像处理篇之腐蚀与膨胀.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

OpenCV图像处理篇之腐蚀与膨胀.docx

1、OpenCV图像处理篇之腐蚀与膨胀OpenCV图像处理篇之腐蚀与膨胀腐蚀与膨胀腐蚀和膨胀是图像的形态学处理中最基本的操作,之后遇见的开操作和闭操作都是腐蚀和膨胀操作的结合运算。腐蚀和膨胀的应用非常广泛,而且效果还很好:1. 腐蚀可以分割(isolate)独立的图像元素,膨胀用于连接(join)相邻的元素,这也是腐蚀和膨胀后图像最直观的展现2. 去噪:通过低尺寸结构元素的腐蚀操作很容易去掉分散的椒盐噪声点3. 图像轮廓提取:腐蚀操作4. 图像分割5. 等等.(在文后给出一则简单实用膨胀操作提取车牌数字区域的例子)结构元素是形态学操作中最重要的概念,如上图,B为结构元素。腐蚀操作描述为:扫描图像的

2、每一个像素,用结构元素与其覆盖的二值图像做“与”操作:如果都为1,结果图像的该像素为1,否则为0。膨胀操作描述为:扫描图像的每一个像素,用结构元素与其覆盖的二值图像做“与”操作:如果都为0,结果图像的该像素为0,否则为1。以上都是关于二值图像的形态学操作,对于灰度图像:1. 腐蚀操作其中,g(x,y)为腐蚀后的灰度图像,f(x,y)为原灰度图像,B为结构元素。腐蚀运算是由结构元素确定的邻域块中选取图像值与结构元素值的差的最小值。2. 膨胀操作其中,g(x,y)为腐蚀后的灰度图像,f(x,y)为原灰度图像,B为结构元素。膨胀运算是由结构元素确定的邻域块中选取图像值与结构元素值的和的最大值。在灰度

3、图的形态学操作中,一般选择“平摊”的结构元素,即结构元素B的值为0,则上面对灰度图的形态学操作可简化如下:好了,这就是基本的形态学操作腐蚀和膨胀,下面是使用OpenCV对图像进行腐蚀和膨胀的程序,还是秉承我们一贯的原则:搁下理论,先直观地感觉图像处理算法的效果,实际项目需要时再深入挖掘!程序分析/* * FileName : eroding_and_dilating.cpp * Author : xiahouzuoxin * Version : v1.0 * Date : Fri 19 Sep 2014 07:42:12 PM CST * Brief : * * Copyright (C) M

4、ICL,USTB */#include cv.h #include highgui.h#include opencv2/imgproc/imgproc.hppusingnamespacestd;usingnamespace cv;#define TYPE_MORPH_RECT (0)#define TYPE_MORPH_CROSS (1)#define TYPE_MORPH_ELLIPSE (2)#define MAX_ELE_TYPE (2)#define MAX_ELE_SIZE (20)Mat src, erode_dst, dilate_dst;constchar *erode_wn

5、= eroding demo;constchar *dilate_wn = dilating demo;int erode_ele_type;int dilate_ele_type;int erode_ele_size;int dilate_ele_size;staticvoid Erosion(int, void *);staticvoid Dilation(int, void *);/* * brief * inputs * outputs * retval */int main(int argc, char *argv)if (argc 2) coutUsage: ./eroding_a

6、nd_dilating file nameendl;return -1; src = imread(argv1);if (!src.data) coutRead image failure.endl;return -1; / WindowsnamedWindow(erode_wn, WINDOW_AUTOSIZE);namedWindow(dilate_wn, WINDOW_AUTOSIZE);/ Track Bar for ErosioncreateTrackbar(Element Typen0:Rectn1:Crossn2:Ellipse, erode_wn, &erode_ele_typ

7、e, MAX_ELE_TYPE, Erosion); / callback ErosioncreateTrackbar(Element Size: 2n+1, erode_wn, &erode_ele_size, MAX_ELE_SIZE, Erosion);/ Track Bar for DilationcreateTrackbar(Element Typen0:Rectn1:Crossn2:Ellipse, dilate_wn, &dilate_ele_type, MAX_ELE_TYPE, Dilation); / callback ErosioncreateTrackbar(Eleme

8、nt Size: 2n+1, dilate_wn, &dilate_ele_size, MAX_ELE_SIZE, Dilation);/ Default startErosion(0, 0);Dilation(0, 0);waitKey(0);return0;/* * brief 腐蚀操作的回调函数 * inputs * outputs * retval */staticvoid Erosion(int, void *)int erode_type;switch (erode_ele_type) case TYPE_MORPH_RECT: erode_type = MORPH_RECT; b

9、reak;case TYPE_MORPH_CROSS: erode_type = MORPH_CROSS;break;case TYPE_MORPH_ELLIPSE: erode_type = MORPH_ELLIPSE;break;default: erode_type = MORPH_RECT;break; Mat ele = getStructuringElement(erode_type, Size(2*erode_ele_size+1, 2*erode_ele_size+1), Point(erode_ele_size, erode_ele_size);erode(src, erod

10、e_dst, ele);imshow(erode_wn, erode_dst);/* * brief 膨胀操作的回调函数 * inputs * outputs * retval */staticvoid Dilation(int, void *)int dilate_type;switch (dilate_ele_type) case TYPE_MORPH_RECT: dilate_type = MORPH_RECT; break;case TYPE_MORPH_CROSS: dilate_type = MORPH_CROSS;break;case TYPE_MORPH_ELLIPSE: di

11、late_type = MORPH_ELLIPSE;break;default: dilate_type = MORPH_RECT;break; Mat ele = getStructuringElement(dilate_type, Size(2*dilate_ele_size+1, 2*dilate_ele_size+1), Point(dilate_ele_size, dilate_ele_size);dilate(src, dilate_dst, ele);imshow(dilate_wn, dilate_dst);1. 膨胀和腐蚀操作的函数分别是erode和dilate,传递给他们的

12、参数也都依次是原图像、形态学操作后的图像、结构元素ele。本程序中给出了3种结构元素类型,分别是2. #define TYPE_MORPH_RECT (0) / 矩形3. #define TYPE_MORPH_CROSS (1) / 十字交叉型#define TYPE_MORPH_ELLIPSE (2) / 椭圆型再通过OpenCV提供的getStructuringElement函数创建Mat类型的结构元素。getStructuringElement的参数依次是结构元素类型(OpenCV中提供了宏定义MORPH_RECT、MORPH_CROSS和MORPH_ELLIPSE表示)、结构元素大小。

13、4. 这里我们首次接触了createTrackbar函数(声明在highgui.hpp中),该函数的功能是给窗口添加滑动条。其原型是:5. CV_EXPORTS int createTrackbar( conststring& trackbarname, conststring& winname,6. int* value, int count,7. TrackbarCallback onChange=0,void* userdata=0);trackbarname为滑动条的名称,将会显示在滑动条的前面,参见结果中的图片显示;winname为窗口名;value为滑动条关联的变量,如上面程序中第

14、一个滑动条关联到erode_ele_type,表示当滑动条滑动变化时,erode_ele_type的值发生响应的变化;count表示滑动条能滑动到的最大值;TrackbarCallback onChange其实是这个函数的关键,是滑动条变化时调用的回调函数。当滑动条滑动时,value值发生变化,系统立刻调用onChange函数,执行相关的操作,回调函数的定义形式是固定的:voidonChange(int, void *)程序中的回调函数Erosion和Dilation函数的定义都遵循该形式:staticvoid Erosion(int, void *);staticvoid Dilation(int, void *);结果及实际应用对“黑白小猪”进行膨胀操作的变化(随着结构元素大小的变化)如下图:对“黑白小猪”进行腐蚀操作的变化(随着结构元素大小的变化)如下图:膨胀与腐蚀在图像处理中具有广泛的用途,比如提取车牌过程中,可以通过膨胀运算确定车牌的区域。如下图为通过sobel算子提取边缘后的车牌,为去掉边界,确定车牌在图中的位置,可以通过膨胀操作,结果如下:上图中的红线区域就是膨胀后能用于确定车牌的连通区域,再通过对连通区域的搜索及“车牌的矩形特性”即可确定含有车牌数字在图片中的位置。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1