Opencv处理图像--腐蚀、膨胀

Opencv处理图像--腐蚀、膨胀

学习之前先弄明白什么是结构元素:

结构元素:二维结构元素可以理解成一个二维矩阵,矩阵元素的值为0或者1;通常结构元素要小于待处理的图像。

腐蚀与膨胀基本原理:就是用一个特定的结构元素来与待处理图像按像素做逻辑操作;可以理解成拿一个带孔的网格板(结构元素矩阵中元素为1的为孔)盖住图像的某一部分,然后按照各种不同的观察方式来确定操作类型。

比如:腐蚀操作就是拿这个结构元素的中心位置(假设参与逻辑计算的元素对应与二维矩阵中元素为1的点,即网格板上的孔),在图像上移动时,如果透过所有的孔都能看到底下的图像,那么这个中心点处的图像就保留,否则去除。

代码如下:

#include<iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
int main()
{
	IplImage* src = cvCreateImage(cvSize(5,5),8,1);
	IplImage* dst = cvCreateImage(cvGetSize(src),8,1); //用来存储腐蚀后的
	IplImage* dst1 = cvCreateImage(cvGetSize(src),8,1); //用来存在膨胀后的
	int x,y;
	for(y = 2;y<4;y++){
		for(x = 2;x<4;x++){
			cvSetReal2D(src,y,x,0);
		}
	}
	for(y = 0;y<src->height;y++){
		for(x = 0;x<src->width;x++){
			double value = cvGetReal2D(src,y,x);
			printf("%3d ",(int)value);
		}
		printf("\n");
	}

	IplConvKernel* element = 0;
	int values[16] = {0,0,0,0,  //自己设置的结构元素
					  0,0,1,0,
					  0,1,1,0,
					  0,0,0,0};

	int cols = 4,rows = 4,anchor_x = 2,anchor_y = 2;

	element = cvCreateStructuringElementEx(cols,rows,anchor_x,anchor_y,CV_SHAPE_CUSTOM,values); //创建结构

	cvErode(src,dst,element,1); //腐蚀  取最小值
	

	printf("dst--\n");
	for(y = 0;y<dst->height;y++){
		for(x = 0;x<dst->width;x++){
			double value = cvGetReal2D(dst,y,x);
			printf("%3d ",(int)value);
		}
		printf("\n");
	}

	cvDilate(dst,dst1,element,1);//膨胀  取最大值
	printf("dst1--\n");
	for(y = 0;y<dst1->height;y++){
		for(x = 0;x<dst1->width;x++){
			double value = cvGetReal2D(dst1,y,x);
			printf("%3d ",(int)value);
		}
		printf("\n");
	}
	//cvWaitKey(0);
	system("pause");
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

代码敌敌畏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值