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

open cv形态学操作

利用之前学习的的sturcturingelement形态学操作结构体进行对接


基本操作
膨胀和腐蚀(替换中心像素-锚点)


形态学操作

开操作- open
●先腐蚀后膨胀dst=open(src,element)=dilate(erode(src,element));
●可以去掉小的对象 ,并且不会把不必要的形状缩小

在这里插入图片描述
去掉小的对象 ,并且不会把不必要的形状缩小


闭操作- close
●先膨胀后腐蚀(bin2) dst=close(src,element) = erode(dilate(src,element))
●可以填充小的洞( flllhole )

在这里插入图片描述
可以填充小的洞( flllhole )


形态学梯度- Morphological Gradient

●膨胀减去腐蚀
dst =morphgrad(src,elment)=dilate(src,element)-erode(src,element)
●又称为基本梯度 (其它还包括,内部梯度(原图)、方向梯度(X,Y方向))
在这里插入图片描述
利用色差进行颜色区分以勾勒轮廓


顶帽-top hat
●顶帽:是原图像与开操作之间的差值图像 有黑点的原图减去去掉黑点的开操作图形 得到小黑点

在这里插入图片描述
原图减去处理过的开操作 获得小白点 减去大白点


黑帽
黑帽是闭操作图像与源图像的差值图像
在这里插入图片描述
闭操作减去原图 必操作之后 大白块里的黑点变成白色随后再减去原图像只剩下白点


相关API
形态学操作
●cv::morphologyEx
(src, dest, CV_MOP_BLACKHAT, kernel);

形态学操作类型
1. CV_ MOP_ OPEN
2. CV_ MOP_ CLOSE

3. CV_ MOP_ GRADIENT
4. CV_MOP_ TOPHAT
5. CV_MOP_ BLACKHAT

Mat SE结构元素
int teration迭代次数,默认是1


#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>
#include <math.h>//morphologyEx形态学操作需要math库文件


using namespace cv;
using namespace std;
Mat dst;
Mat src;

int Osize = 3;
int Msize= 21;

void MORPHOLOGY(int, void*);
//没有int和void* 滑块不起作用

int main()
{

	 //  src = imread("D:/实验台/机器视觉/测试图片/机器人正面.jpg");
	 src = imread("D:/实验台/机器视觉/测试图片/灰色衬衫.jpg");//形态学梯度用图
	if (!src.data)
	{
		cout << "无法导入" << endl;
		return -1;
	}

	namedWindow("原图",CV_WINDOW_AUTOSIZE);
	imshow("原图",src);
	namedWindow("开操作",CV_WINDOW_AUTOSIZE);
	createTrackbar("卷积核大小","开操作",&Osize,Msize, MORPHOLOGY);
	MORPHOLOGY(0,0);

	waitKey(0);
}

void MORPHOLOGY(int, void*)
{
	cvtColor(src, dst, CV_BGR2GRAY);

	threshold(dst, dst, 200, 255, THRESH_BINARY);//阈值化操作 配合灰度化可实现图像二值化(黑白)
	
	//(阀门)threshold(原图像, 处理后图像, 阈值, 最大值, 阀值类型(二进制));
	//THRESH_BINARY  当前点值大于阈值时,取Maxval,也就是第四个参数,下面再不说明,否则设置为0
    //THRESH_BINARY_INV 当前点值大于阈值时,设置为0,否则设置为Maxval
	//THRESH_TRUNC 当前点值大于阈值时,设置为阈值,否则不改变
	//THRESH_TOZERO 当前点值大于阈值时,不改变,否则设置为0
	//THRESH_TOZERO_INV  当前点值大于阈值时,设置为0,否则不改变

	int s = Osize *2+1;
	Mat SE = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1));
	//morphology(原图像,处理后图像,形态学操作类型,结构元素);
	//morphologyEx(src, dst, CV_MOP_OPEN, SE);//开操作 可以去掉小的白色对象,保证大的白色部分不变。假设对象是白色,背景是黑色。
	//morphologyEx(dst,dst,CV_MOP_CLOSE,SE);//闭操作  以填充小的黑色洞,大片的黑色不变,假设对象是白色,背景是黑色,去掉污渍
	morphologyEx(dst,dst,CV_MOP_GRADIENT,SE);//梯度操作  利用色差进行颜色区分勾勒轮廓
	//morphologyEx(src,dst,CV_MOP_TOPHAT,SE);//顶帽操作 原图减去处理过的开操作 获得小白点 减去大白点
    //morphologyEx(dst,dst,CV_MOP_BLACKHAT,SE);//黑帽操作 闭操作减去原图 必操作之后 大白块里的黑点变成白色随后再减去原图像只剩下白点 
	
	imshow("开操作", dst);
	return;
}

相关文章:

  • 微软发布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 消费电子
  • open cvCanny检测
  • Android布局之weight属性解析
  • SegmentFault for Android 3.0 发布
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • Android组件 - 收藏集 - 掘金
  • golang 发送GET和POST示例
  • in typeof instanceof ===这些运算符有什么作用
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Javascripit类型转换比较那点事儿,双等号(==)
  • java取消线程实例
  • leetcode46 Permutation 排列组合
  • swift基础之_对象 实例方法 对象方法。
  • Zepto.js源码学习之二
  • 复杂数据处理
  • 关于extract.autodesk.io的一些说明
  • 蓝海存储开关机注意事项总结
  • 老板让我十分钟上手nx-admin
  • 排序算法之--选择排序
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 世界上最简单的无等待算法(getAndIncrement)
  • 算法---两个栈实现一个队列
  • 算法之不定期更新(一)(2018-04-12)
  • 线上 python http server profile 实践
  • 再次简单明了总结flex布局,一看就懂...
  • 正则与JS中的正则
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (分享)自己整理的一些简单awk实用语句
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (三十五)大数据实战——Superset可视化平台搭建
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • (轉貼) UML中文FAQ (OO) (UML)
  • .net core 6 集成和使用 mongodb
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • /etc/sudoers (root权限管理)