cvMorphologyEx()
感性认识:可以实现几种使用的处理,如:反色、去掉边缘的模糊点(非常使用,以后再也不用一点一点地用画画板去擦)
函数原型:
CVAPI(void) cvMorphologyEx( const CvArr* src, CvArr* dst,
CvArr* temp, IplConvKernel* element,
int operation, int iterations CV_DEFAULT(1) );
src原图像;dst目标图像;temp中间临时图像;element核;operation 五种形态学
/* Morphological operations */
enum
{
CV_MOP_ERODE =0,//腐蚀
CV_MOP_DILATE =1,//膨胀
CV_MOP_OPEN =2,//开运算
CV_MOP_CLOSE =3,//闭运算(平滑边缘)
CV_MOP_GRADIENT =4,//形态梯度(反色)
CV_MOP_TOPHAT =5,//“礼帽”
CV_MOP_BLACKHAT =6//“黑帽”
};
开运算的感性认识:
闭运算的感性认识:
形态梯度
测试用图:
#include <highgui.h>
#include<cv.h>
using namespace std;
int main()
{
IplImage *img_in = cvLoadImage("test.jpg",3);
IplImage *img_temp =cvCreateImage(cvSize(img_in->width,img_in->height),IPL_DEPTH_8U,3);
IplImage *img_out_1 =cvCreateImage(cvSize(img_in->width,img_in->height),IPL_DEPTH_8U,3);
IplImage *img_out_2 =cvCreateImage(cvSize(img_in->width,img_in->height),IPL_DEPTH_8U,3);
IplImage *img_out_3 =cvCreateImage(cvSize(img_in->width,img_in->height),IPL_DEPTH_8U,3);
IplImage *img_out_4 =cvCreateImage(cvSize(img_in->width,img_in->height),IPL_DEPTH_8U,3);
IplImage *img_out_5 =cvCreateImage(cvSize(img_in->width,img_in->height),IPL_DEPTH_8U,3);
cvNamedWindow("img_in",CV_WINDOW_AUTOSIZE);
cvShowImage("img_in",img_in);
cvMorphologyEx(img_in,img_out_1,img_temp,NULL,CV_MOP_OPEN);
cvNamedWindow("CV_MOP_OPEN",CV_WINDOW_AUTOSIZE);
cvShowImage("CV_MOP_OPEN",img_out_1);
cvMorphologyEx(img_in,img_out_2,img_temp,NULL,CV_MOP_CLOSE);
cvNamedWindow("CV_MOP_CLOSE",CV_WINDOW_AUTOSIZE);
cvShowImage("CV_MOP_CLOSE",img_out_2);
cvMorphologyEx(img_in,img_out_3,img_temp,NULL,CV_MOP_GRADIENT);
cvNamedWindow("CV_MOP_GRADIENT",CV_WINDOW_AUTOSIZE);
cvShowImage("CV_MOP_GRADIENT",img_out_3);
cvMorphologyEx(img_in,img_out_4,img_temp,NULL,CV_MOP_TOPHAT);
cvNamedWindow("CV_MOP_TOPHAT",CV_WINDOW_AUTOSIZE);
cvShowImage("CV_MOP_TOPHAT",img_out_4);
cvMorphologyEx(img_in,img_out_5,img_temp,NULL,CV_MOP_BLACKHAT);
cvNamedWindow("CV_MOP_BLACKHAT",CV_WINDOW_AUTOSIZE);
cvShowImage("CV_MOP_BLACKHAT",img_out_5);
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&img_in);
cvReleaseImage(&img_out_1);
cvReleaseImage(&img_out_2);
cvReleaseImage(&img_out_3);
cvReleaseImage(&img_out_4);
cvReleaseImage(&img_out_5);
return 0;
}
运行结果: