Opencv2系列学习笔记7(图像形态学运算)

形态学滤波理论于上世纪90年代提出,被用于分析及处理离散图像。它定义了一系列的运算,应用预定义的形状元素来变换一张图像

一:图像腐蚀、膨胀和开闭运算

图像的腐蚀:替换为当前像素位像素集合中的最小像素值<在结构元素的几何中>,函数为erode

图像的膨胀:替换为当前像素位像素集合中的最大像素值,函数为dilate

图像的开运算:先腐蚀后膨胀,函数为morphologyEx,对应的参数为MORPH_CLOSE

图像的闭运算:先膨胀后腐蚀,函数为morphologyEx,对应的参数为MORPH_OPEN

Code:

[cpp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. Mat image = imread("F:\\lena.png", 0);  
  2.     /*腐蚀运算 替换为当前像素位像素集合中的最小像素值*/  
  3.     Mat eroded;  
  4.     erode(image, eroded, Mat());  
  5.   
  6.     /*膨胀运算 替换为当前像素位像素集合中的最大像素值*/  
  7.     Mat dilated;  
  8.     dilate(image, dilated, Mat());  
  9.   
  10.     /*闭运算 先膨胀后腐蚀 
  11.     开运算 先腐蚀后膨胀 
  12.     */  
  13.     Mat closed;  
  14.     Mat element(5, 5, CV_8U, Scalar(1));  
  15.     morphologyEx(image, closed, MORPH_CLOSE, element);  

Result:

膨胀:

腐蚀:

二:利用形态学滤波进行边缘检测

思想:形态学滤波利用梯度进行边缘检测  原理就是计算膨胀后的图像和腐蚀后的图像的差值,由于两个变换后的图像不同之处主要在边缘处,图像边缘将通过求差得到强化。函数为morphologyEx,参数为MORPH_GRADIENT。

此外后面可以用sobel算子<方向滤波器>,拉普拉斯变换<二阶导数滤波器>和Canny算子对图像进行边缘检测。

Code:

[cpp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. Mat result;  
  2.     /* 形态学滤波利用梯度进行边缘检测  原理就是计算膨胀后的图像和腐蚀后的图像的差值, 
  3.     由于两个变换后的图像不同之处主要在边缘处,图像边缘将通过求差得到强化。 
  4.     还可以利用图像形态学滤波对图像进行角点检测。。 
  5.     */  
  6.     morphologyEx(image, result, MORPH_GRADIENT, Mat());   
  7.     threshold(result, result, 50, 255, THRESH_BINARY);  

Result:


三:形态学运算的其它应用

利用图像的形态学运算还可以对图像进行角点检测,当然效果肯定不如之前的Harris等算子的角点检测,故不作介绍。此外还可以通过利用分水岭算法对图像进行分割以及用GrabCut算法提取前景物体。后面如有用到,会详细介绍,这里粗略笔记。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值