我的OpenCV学习笔记(16):利用工具条调用基本的形态学操作

本文介绍了OpenCV中的形态学操作,包括腐蚀、膨胀、开运算和闭运算,以及如何使用工具条进行交互式操作。通过erode、dilate和morphologyEx函数实现这些操作,并展示了createTrackbar函数在创建工具条中的应用。
摘要由CSDN通过智能技术生成

这次主要介绍两方面的内容,一部分是形态学操作,另一部分是工具条。

先说形态学操作。这里只介绍4种简单的:腐蚀、膨胀、开、闭。最基本的形态学操作是腐蚀和膨胀。其他的操作可以通过腐蚀和膨胀推导出来。

用集合论的观点介绍他们非常麻烦。这里换一种思路:我们先做一定的假设:对于一幅图像:前景(我们感兴趣的部分)是白色的;背景(不感兴趣的部分)是黑色的。然后就可以望文生义一下了:腐蚀操作会使得前景变小,而膨胀会使得前景变大。这主要是当结构元(用来对图像处理的基本模版)作用于图像的边沿时,两种操作的定义引起的。腐蚀操作时只有当整个结构元都在图像边沿内时,锚点(结构元与图像中每个像素对齐的点,通常取作结构元的几何中心)对准的像素才会被保留,判为前景;否则这个点判为背景。膨胀操作则是只要结构元与图像有交集时,锚点对准的像素就会被保留,判为前景。腐蚀可以用来消除一些小的误检测的前景;而膨胀则可以填充一些小洞。

注意到,用3*3的模板腐蚀3次与用7*7的模板腐蚀一次效果是相同的。膨胀的结果可以类推。

有了这两个运算的基本定义,我们就可以定义开运算和闭运算了:开运算就是腐蚀以后再膨胀,而闭运算是膨胀以后再腐蚀。闭运算使得小洞被填上,临近的目标连接到了一起(任何结构元容纳不下的小洞或者缝隙都会被填充)。而开运算则会除去一些小的斑点。

对一幅图像多次使用开运算而闭运算是没有意义的。这与腐蚀和膨胀不同。

在OpenCV中,使用erode和dilate实现腐蚀与膨胀。要实现开运算或者闭运算,当然可以通过腐蚀完以后膨胀之类的方法完成,但是OpenCV通过了一个函数morphologyEx,通过改变函数中的参数来实现不同的形态学运算。下面的代码对这4种运算进行了简单的说明:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace cv;
int main( void )
{
	Mat image = imread("D:/picture/images/binary.bmp");
	if(!image.data)
		return -1;	
	imshow("源图像",image);

	//腐蚀操作
	Mat eroded;
	//默认情况下,结构元为3*3
	erode(image,eroded,Mat());
	erode(eroded,eroded,Mat());
	erode(eroded
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值