OpenCV对形态学的运算处理

本文深入探讨了数学形态学运算的基本概念,包括腐蚀、膨胀、开运算、闭运算等,并通过代码实例展示了如何在图像处理中实现这些运算。开运算与闭运算通过腐蚀与膨胀的不同组合,实现了图像细节的增强与缺陷的修复。本文还介绍了高级操作如形态梯度、顶帽变换和黑帽变换,进一步丰富了数学形态学在实际应用中的能力。
摘要由CSDN通过智能技术生成

        数学形态运算,最常见的基本运算有七种,分别为:腐蚀、膨胀、开运算、闭运算、击中、细化和粗化,它们是全部形态学的基础。
        如下代码即可实现腐蚀与膨化。
int _tmain(int argc, _TCHAR* argv[])
{
 IplImage* src = cvLoadImage("jk.jpg");
 IplImage* dst = cvCreateImage(cvGetSize(src),src->depth,src->nChannels);
 cvErode(src,dst,NULL,2);
 cvSaveImage("erode.jpg",dst);
 //cvDilate(src,dst,NULL,2);
 //cvSaveImage("dilate.jpg",dst);

 cvWaitKey(0);
 cvReleaseImage(&src);
 cvReleaseImage(&dst);
 return 0;
}

/*****************************
腐蚀和膨胀,看上去好像是一对互逆的操作,实际上,这两种操作不具有互逆的关系。
开运算和闭运算正是依据腐蚀和膨胀的不可逆性,演变而来的。
先腐蚀后膨胀的过程就称为开运算。
闭运算是通过对腐蚀和膨胀的另一种不同次序的执行而得到的,闭运算是先膨胀后腐蚀的过程,其功能是用来填充物体内细小空洞、连接邻近物体、平滑其边界,同时不明显改变不明显改变其面积。
******************************/
作用:
cvErode()腐蚀后cvDilate()膨胀,叫作开操作,那些离散点或游丝线、毛刺就被过滤,
cvDilate()膨胀后cvErode()腐蚀,叫作闭操作,那些断裂处就被缝合。
    cvErode,是opencv库中的一个函数。函数形式为:void cvErode( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );研究方法:src:输入图像。dst:输出图像。element:用于腐蚀的结构元素。若为 NULL, 则使用 3×3 长方形的结构元素,iterations:腐蚀的次数。
element可以用cvCreateStructuringElementEx创建,用cvReleaseStructuringElement释放。如下:
IplConvKernel* cvCreateStructingElementEx( 
 int cols, //行
 int rows,  //列
 int anchor_x,  //核的封闭矩形内的参考点的坐标
 int anchor_y, 
 int shape,  //CV_SHAPE_RECT:核是矩形,CV_SHAPE_CROSS:十字交叉形,CV_SHAPE_ELLIPSE:椭圆形,CV_SHAPE_CUSTOM:用户自定义的值
 int* values = null 
 ); 
高级操作

对于灰度图或彩色图,不可以直接用cvErode和cvDilate来处理,这里需要更通用的函数,即cvMorphologyEx,例子如下:
#include "StdAfx.h"
#include "cv.h" 
#include "highgui.h" 
#include "highgui.h" 

int main(int argc, char ** argv) 

 cvNamedWindow("sourceImage"); 
 cvNamedWindow("open"); 
 cvNamedWindow("close"); 
 cvNamedWindow("gradient");
 cvNamedWindow("topHat");
 cvNamedWindow("blackHat");
 IplImage * src = cvLoadImage("test.bmp"); 
 cvShowImage("sourceImage",src);
 IplImage * temp = cvCreateImage(cvGetSize(src), 8,3); 
 IplImage * img=cvCreateImage(cvGetSize(src), 8, 3); 
 cvCopyImage(src,temp); 
 cvCopyImage(src, img); 
 //开运算 
 cvMorphologyEx( 
  src, 
  img, 
  temp, 
  NULL, //default 3*3 
  CV_MOP_OPEN, 
  4); 
 cvShowImage("open", img); 
 //闭运算 
 cvMorphologyEx( 
  src, 
  img, 
  temp, 
  NULL, //default 3*3 
  CV_MOP_CLOSE, 
  4); 
 cvShowImage("close", img); 
 //形态梯度 
 cvMorphologyEx( 
  src, 
  img, 
  temp, 
  NULL, //default 3*3 
  CV_MOP_GRADIENT, 
  3); 
 cvShowImage("gradient", img); 
 //cvWaitKey(0); 

 //"礼帽" 
 cvMorphologyEx( 
  src, 
  img, 
  temp, 
  NULL, //default 3*3 
  CV_MOP_TOPHAT, 
  3); 
 cvShowImage("topHat", img); 
 //cvWaitKey(0); 
 //“黑帽” 
 cvMorphologyEx( 
  src, 
  img, 
  temp, 
  NULL, //default 3*3 
  CV_MOP_BLACKHAT, 
  3); 
 cvShowImage("blackHat", img); 
 cvWaitKey(0); 
 cvReleaseImage(&temp); 
 cvReleaseImage(&src); 
 cvReleaseImage(&img); 
 cvDestroyAllWindows(); 
 return 0; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山西茄子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值