OpenCV对形态学的运算处理

        数学形态运算,最常见的基本运算有七种,分别为:腐蚀、膨胀、开运算、闭运算、击中、细化和粗化,它们是全部形态学的基础。
        如下代码即可实现腐蚀与膨化。
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; 
}

你可能感兴趣的:(视频--分析应用)