openCV学习笔记十:膨胀与腐蚀

图像形态学即数学形态学(Mathematical morphology)是一门建立在格伦和拓扑学基础上的图像分析学科,是数学形态学图像处理的基本理论。
最基本的形态学操作是:膨胀(dilation)和腐蚀(erosion);

参数详解:
1.定义核(获取结构元素)——getStructuringElement()
Mat getStructuringElement(int shape, Size ksize, Point anchor=Point(-1,-1))
shape:模板形狀,有MORPH_RECT、MORPH_ELLIPSE、MORPH_CROSS三種可選。
ksize:模板尺寸。
2.膨胀——dilate()
dilate(const Mat &src, Mat &dst, Mat kernel, Point anchor=Point(-1,-1), int iterations=1)
src:输入图像
dst:目标图像
kernel:結構元素,如果kernel=Mat()則為預設的3×3矩形,越大膨脹效果越明顯。
anchor:原點位置,預設為結構元素的中央。
iterations:執行次數,預設為1次,執行越多次膨脹效果越明顯。
3.腐蚀——erode()
erode(const Mat &src, Mat &dst, Mat kernel, Point anchor=Point(-1,-1), int iterations=1)
src:输入图像
dst:输出图像
kernel:結構元素,如果kernel=Mat()則為預設的3×3矩形,越大侵蝕效果越明顯。
anchor:原點位置,預設為結構元素的中央。
iterations:執行次數,預設為1次,執行越多次侵蝕效果越明顯。

膨胀和腐蚀的主要用途:
消除噪声;
分割出独立的图像元素,在图像中连接相邻的元素;
寻找图像中明显的极大值或极小值区;
求出图像的梯度;
【注】:
腐蚀和膨胀是对像素值大的部分而言的,即高亮白部分而不是黑色部分;膨胀是图像中的高亮部分进行膨胀,领域扩张,效果图拥有比原图更大的高亮区域;腐蚀是图像中的高亮部分被腐蚀掉,领域缩减,效果图拥有比原图更小的高亮区域;
膨胀原理:
膨胀:求局部最大值;①定义一个卷积核B,核可以是任何的形状和大小,且拥有一个单独定义出来的参考点-锚点(anchorpoint);通常和为带参考点的正方形或者圆盘,可将核称为模板或掩膜;②将核B与图像A进行卷积,计算核B覆盖区域的像素点最大值;③将这个最大值赋值给参考点指定的像素;因此,图像中的高亮区域逐渐增长。
在这里插入图片描述
腐蚀原理:
腐蚀:局部最小值(与膨胀相反);①定义一个卷积核B,核可以是任何的形状和大小,且拥有一个单独定义出来的参考点-锚点(anchorpoint);通常和为带参考点的正方形或者圆盘,可将核称为模板或掩膜;②将核B与图像A进行卷积,计算核B覆盖区域的像素点最小值;③将这个最小值赋值给参考点指定的像素;因此,图像中的高亮区域逐渐减小。

在这里插入图片描述
实例代码如下:
#include
#include <cv.h>
#include <highgui.h>
#include <windows.h>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
Mat srcImg = imread(“1.JPG”, CV_LOAD_IMAGE_COLOR);
Mat dstImg;
Mat element = getStructuringElement( MORPH_RECT, Size(5, 5) );//MORPH_RECT,矩形;MORPH_CROSS,交叉形;MORPH_ELLIPSE,椭圆形//内核尺寸
cout << element << endl; //在控制台输出kernel
///膨胀
dilate(srcImg, dstImg, element, Point(-1, -1), 1);//输入图像//输出图像定义的kernel 锚点位置,默认值Point(-1,-1),表示位于中心//膨胀的次数
///腐蚀
/* erode(srcImg, dstImg, element, Point(-1, -1), 1);*/
imshow(“src”, srcImg);
imshow(“dst”, dstImg);
waitKey(0);
}
在这里插入图片描述
运行结果如下:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,OpenCV是一个开源计算机视觉和机器学习软件库,用于开发图像和视频处理应用程序。通过使用OpenCV,您可以读取摄像头并显示实时图像,打开视频文件或摄像头文件,并获取视频的相关信息,例如帧宽度、帧高度、帧率和总帧数。 对于学习OpenCV,你可以按照以下步骤进行: 1. 安装OpenCV库:在开始学习OpenCV之前,您需要从OpenCV官方网站下载和安装OpenCV库。根据您的操作系统和编程语言选择合适的版本。 2. 学习基本概念:熟悉OpenCV的基本概念和术语,例如图像和视频的加载、显示、保存以及常用的图像处理操作,如滤波、边缘检测和特征提取等。 3. 掌握OpenCV函数和类:深入了解OpenCV提供的函数和类,例如cv::Mat用于图像和矩阵操作,cv::VideoCapture用于读取和处理视频,以及cv::imshow和cv::waitKey等用于显示图像的函数。 4. 实践项目:通过完成一些实践项目来应用您所学到的知识。例如,利用OpenCV实现人脸检测、目标追踪、图像识别等。 5. 学习资料和资源:查找和阅读OpenCV的官方文档、教程和示例代码,参与开源社区讨论和交流,加入相关的论坛和邮件列表等。 总结起来,学习OpenCV包括安装OpenCV库、学习基本概念、掌握OpenCV函数和类、实践项目以及查找和阅读相关资料和资源。通过不断实践和学习,您将能够更好地理解和应用OpenCV库来开发图像和视频处理应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值