Opencv 图像处理——膨胀和腐蚀

10 篇文章 0 订阅

opencv 图像处理——膨胀和腐蚀

  腐蚀和膨胀是基本的形态学运算。形态学中最基本的概念是结构元素。结构元素可以简单的定义为像素的组合,在对应的元素上定义了一个原点(也称为锚点)。

Opencv中的API

cv::Mat getStructuringElement(int shape, 
								Size esize, 
								Point anchor = Point(-1, -1)
								);

这个函数的第一个参数表示内核的形状,有三种形状可以选择。
矩形:MORPH_RECT;
交叉形:MORPH_CORSS;
椭圆形:MORPH_ELLIPSE;
第二和第三个参数分别是内核的尺寸以及锚点的位置。一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得getStructuringElement函数的返回值。对于锚点的位置,有默认值Point(-1,-1),表示锚点位于中心点。



createTrackbar(const String& trackbarname, //参数名称
				const String& winname,//作用在窗口的名称
				int* value,//初始值
				int count,//最大值
				TrackbarCallback onChange = 0,//回调函数
				void* userdata = 0
				);



膨胀

  假设图像A和结构元素B,结构元素B在A上面移动,其中B定义其中心为锚点,计算B覆盖下A的最大像素值来替代锚点的像素。

dilate( InputArray src, //输入图像
		OutputArray dst, //输出图像
		InputArray kernel,//cv::Mat getStructuringElement()返回的值
		Point anchor = Point(-1,-1), 
		int iterations = 1
		);

在这里插入图片描述

腐蚀

  腐蚀和膨胀操作的过程相似,唯一不同的是以最小值替换锚点重叠下图像的像素值。

cv::erode( InputArray src,   //输入图像
			OutputArray dst, //输出图像
			InputArray kernel,//cv::Mat getStructuringElement()返回的值
			Point anchor = Point(-1,-1), 
			int iterations = 1
			);

在这里插入图片描述

代码:

#include<iostream>
#include<opencv2\opencv.hpp>


cv::Mat image;
cv::Mat dst;
int min_ele = 3;
void callback(int pos, void* userdata);
int main()
{
	cv::Mat dst1;
	image = cv::imread("binary.bmp");
	cv::namedWindow("input picture");
	cv::imshow("input picture", image);
	cv::imshow("output picture", image);
	cv::createTrackbar("element", "output picture", &min_ele, 20, callback);
	
	cv::waitKey(0);
	return 0;

}
void callback(int , void* )
{
	int s = min_ele * 2 + 1;
	cv::Mat structure = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(s, s), cv::Point(-1, -1));
	cv::dilate(image, dst, structure, cv::Point(-1, -1),1);
	cv::erode(image, dst, structure, cv::Point(-1, -1), 1);
	cv::imshow("output picture", dst);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值