当前位置: 首页 > news >正文

open cv膨胀与腐蚀

什么是膨胀与腐蚀

形态学操作(morphology operators)-膨胀(空白区域变大了,暗色部分变小了)
●dilatel(src, dst, kerne)

最大像索值用来替换锚点的像素(背景的像素值最大所以就膨胀了背景)

可以运用膨胀消除背景中的小的黑点

●图像形态学操作-基于形状的一 系列图像处理操作的
合集,主要是基于集合论基础上的形态学数学
●形态学有四个基本操作:腐蚀、膨胀、开、闭
●膨胀与腐蚀是图像处理中最常用的形态学操作手段

●跟卷积操作类似, 假设有图像A(背景)和结构元素B(要变化的图形) ,结构元
素B在A上面移动,其中B定义其中心为锚点 ,计算B覆
盖下A的最大像索值用来替换锚点的像素,其中B1作为
结构体可以是任意形状

------------------------------------------------------------------------------------------
形态学操作-腐蚀(黑色区域变大了,空白区域变小了)
●erode(src, dst, kernel)

腐蚀跟膨胀操作的过程类似,唯一不同的是以最小值替换锚点重叠下图像的像素值
可以运用腐蚀消除背景中小的白点

最小像索值用来替换锚点的像素(图形的像素值最小所以就膨胀了图形)
●腐蚀跟膨胀操作的过程类似,唯一不同的是以最小值
替换锚点重叠下图像的像素值
------------------------------------------------------------------------------------------
形态学操作(morphology operators)-膨胀(空白区域变大了,暗色部分变小了)
●dilatel(src, dst, kerne)

最大像索值用来替换锚点的像素(背景的像素值最大所以就膨胀了背景)

可以运用膨胀消除背景中的小的黑点

------------------------------------------------------------------------------------------
相关API
形态学操作结构体的定义

●getStructuringElement(int shape, Size ksize, Point anchor)
Ksize(卷积核)一定要是奇数
.形状(MORPH_RECT\MORPH _CROSS\MORPH_ELlIPSE)
.大小
.锚点默认是Poit(1, 1)意思就是中心像素

●erode(src, dst, kernel)

动态调整结构元素大小(可拖动滑块)
●TrackBar-createTrackbar(constString& trackbarname,
constString winName, int* value, int count,
Track bar call back func, void* userdata=0)
其中最中要的是callback函数功能,如果设置为null就是
说只有值update ,但是不会调callback的函数
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>


using namespace cv;
using namespace std;

Mat src, dst, gray;

int num;

//char  OUTPUT_WIN[] = "output image";//放在这里让主函数和子函数都能找到这个窗口
//因为滑动条需要依附窗口名 所以不能用imshow函数 需要定义创建窗口名


int OriginalSize= 3;
int MAXsize = 21;

void CallBack_Demo(int, void*);//回调函数 
// void *,任何类型的指针都可以直接赋值给它,无需进行强制类型转换。

int main()
{	  

	 src = imread("D:/实验台/机器视觉/测试图片/盖茨膨胀与腐蚀噪点实验.jpg");
	if (!src.data)
	{
		cout << "无法导入" << endl;
		return -1;
	}

	imshow("原图", src);

	namedWindow("腐蚀与膨胀",CV_WINDOW_AUTOSIZE);//如果没有imshow函数需要手动创建窗口

	createTrackbar("调节值:","腐蚀与膨胀", &OriginalSize,MAXsize,CallBack_Demo);
	//动态调整结构元素大小(界面操作:创造一个滑动控件)
	//程度大于1时膨胀
	//第一个参数:拖动条名称
	//第二个参数:滑动条依附的窗口名
	//第三个参数:滑块的位置,创建时,滑块初始位置就是这个变量当前的值 在到达MAXsize之前 滑动条变量为OriginalSize
	//第四个参数:元素的最大值
	//第五个参数:一个callback功能函数 回调函数
	CallBack_Demo(0,0);//调用子函数 0, 0为返回值 需要显示返回值时可以把0换成num进行输出

	waitKey(0);
	return 0;
}

void CallBack_Demo(int, void*)
{

	int s = OriginalSize * 2 + 1;//s(卷积核大小)只能为奇数 设置为受滑动条控制
	Mat	SE = getStructuringElement(MORPH_RECT, Size(s,s),Point(-1,-1));//获取结构元素
	//getStructuringElement函数会返回指定形状和尺寸的结构元素。
	//第一个参数:结构(卷积核)的形状MORPH_RECT矩形\ MORPH_CROSS交叉形\ MORPH_ELLIPSE椭圆形 矩形效果最好 
	//第二个参数:卷积和大小尺寸,只能为正的奇数
	//第三个参数:锚点默认是Point(-1, -1),意思是中心像素点

	//cvtColor(src, gray, CV_BGR2GRAY);//灰度处理 腐蚀用到时需要用gray替换src

	erode(src,dst,SE);//腐蚀
	//SE为获得的结构元素,将结构元素SE覆盖下的所有像素的最小值赋给锚点

	//dilate(src, dst, SE,Point(-1,-1),1);//膨胀
	//dilate(src, dst, SE);也可以
	//SE为获得的结构元素,将结构元素SE覆盖下的所有像素的最大值赋给锚点
	imshow("腐蚀与膨胀",dst);

	return ;
}

相关文章:

  • 浅谈外链因何而存在?
  • open cv形态学操作
  • 微软发布Surface平板电脑 再度挑战苹果
  • open cv提取水平线与垂直线
  • 用VBScript实现Zip解压缩目录中的所有文件
  • open cv图像上采样与下采样
  • C#中的Main方法
  • open cv阈值的基本操作
  • GridView 点击子View时设置子View的背景色为透明
  • open cv常见算子与自定义线性滤波
  • open cv边缘的处理
  • open cvSobel算子与Scharr算子
  • 如何学习一个新的PHP框架
  • open cvLaplance算子
  • SINOCES 2012 消费电子
  • [笔记] php常见简单功能及函数
  • JSONP原理
  • Mysql5.6主从复制
  • Python - 闭包Closure
  • Redis 中的布隆过滤器
  • SQL 难点解决:记录的引用
  • 百度地图API标注+时间轴组件
  • 用 Swift 编写面向协议的视图
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .bat批处理出现中文乱码的情况
  • .FileZilla的使用和主动模式被动模式介绍
  • .net core 6 redis操作类
  • .net wcf memory gates checking failed
  • .net(C#)中String.Format如何使用
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET微信公众号开发-2.0创建自定义菜单
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • [16/N]论得趣
  • [Android] Upload package to device fails #2720
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [C# 基础知识系列]专题十六:Linq介绍
  • [delphi]保证程序只运行一个实例
  • [DevEpxress]GridControl 显示Gif动画
  • [Gamma]阶段测试报告
  • [Grafana]ES数据源Alert告警发送
  • [IE技巧] 使IE8以单进程的模式运行
  • [JS]JavaScript 注释 输入输出语句
  • [JS入门到进阶] 前端开发不能写undefined?这是误区!
  • [LeetCode]-Integer to Roman 阿拉伯数字转罗马数字
  • [Linux版本Debian系统]安装cuda 和对应的cudnn以cuda 12.0为例
  • [Luogu P3527BZOJ 2527][Poi2011]Meteors(整体二分+BIT)