形态学的高级形态往往是建立在腐蚀和膨胀这两个基本操作之上,关于腐蚀和膨胀请参考OpenCV中的腐蚀和膨胀(9)

使用OpenCV中函数morphologyEx进行形态学操作

(1)开运算 (Opening)

(2)闭运算 (Closing)

(3)形态梯度 (Morphological Gradient)

(4)顶帽 (Top Hat)

(5)黑帽(Black Hat)

开运算(Opening)

开运算是通过先对图像腐蚀再膨胀实现的

能够排除小团块的物体(假设物体背景明亮)

闭运算(Closing)

闭运算是通过先对图像膨胀后再腐蚀实现的

能够排除小型黑洞(黑色区域)

形态梯度(Morphological Gradient)

膨胀图与腐蚀图只差

顶帽(Top Hat)

原图像与开运算结果的图只差

黑帽(Black Hat)

闭运算结果图与原图像只差

函数morphologyEx参数介绍

void morphologyEx( InputArray src,// 预处理图像

OutputArray dst,// 处理结果图像

int op,// 需要运行的形态学操作

InputArray kernel,

Point anchor = Point(-1,-1),

int iterations =1,

int borderType = BORDER_CONSTANT,

const Scalar& borderValue = morphologyDefaultBorderValue()

);

op 有六种形式 (2--6)

Opening:MORPH_OPEN: 2 // 开运算

Closing:MORPH_CLOSE: 3 // 闭运算

Gradient:MORPH_GRADIENT: 4 // 形态梯度

Top Hat:MORPH_TOPHAT: 5 // 顶帽

Black Hat:MORPH_BLACKHAT: 6 // 黑帽

代码

- (void)initMat {

self.img = [UIImage imageNamed:@"123.png"];

UIImageToMat(_img, m_src);

[self morphologyEx];

}

- (void)createImageView {

CGFloat h = self.view.frame.size.width * 2 / 3;

self.imgView1 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, h)];

[self.view addSubview:_imgView1];

_imgView1.backgroundColor = [UIColor lightGrayColor];

_imgView1.image = _img;

self.imgView2 = [[UIImageView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(_imgView1.frame) + 5, self.view.frame.size.width, h)];

[self.view addSubview:_imgView2];

_imgView2.backgroundColor = [UIColor lightGrayColor];

_imgView2.image = _img;

}

- (void)createSlider {

NSArray *tempArr = @[@"Operator :", @"Element :", @"Kernel Size :"];

CGFloat w = self.view.frame.size.width - 100;

CGFloat y = self.view.frame.size.height - 50;

for (NSInteger i = 0; i < 3; i++) {

UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(90,  y - 45 * i, w, 40)];

[self.view addSubview:slider];

[slider addTarget:self action:@selector(valueChanged:)

forControlEvents:UIControlEventValueChanged];

[self sliderMumValueWith:i slider:slider];

slider.tag = 1000 + i;

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, y - 45 * i, 80, 40)];

label.textAlignment = NSTextAlignmentRight;

[self.view addSubview:label];

label.font = [UIFont systemFontOfSize:10];

label.text = tempArr[i];

}

}

- (void)sliderMumValueWith:(NSInteger)i slider:(UISlider *)slider {

switch (i) {

case 0: {

slider.continuous = YES; // NO makes it call only once you let go

slider.minimumValue = 2;

slider.maximumValue = 6;

} break;

case 1: {

slider.continuous = YES; // NO makes it call only once you let go

slider.minimumValue = 0;

slider.maximumValue = 2;

} break;

case 2: {

slider.continuous = YES; // NO makes it call only once you let go

slider.minimumValue = 0;

slider.maximumValue = 21;

} break;

}

}

- (void)morphologyEx {

// 由于 MORPH_X的取值范围是: 2,3,4,5 和 6

Mat element = getStructuringElement(morph_elem, cv::Size(2 * morph_size + 1, 2 * morph_size + 1), cv::Point(morph_size, morph_size));

/// 运行指定形态学操作

morphologyEx(m_src, m_dst, morph_operator, element);

_imgView2.image = MatToUIImage(m_dst);//morph_operator

}

创建公共变量

Mat m_src, m_dst;

int morph_elem = 0;

int morph_size = 0;

int morph_operator = 0;

调用

[self initMat];

[self createSlider];

[self createImageView];

参考资料

OpenCV for iOS 学习笔记(十)—— 形态学变换

更多形态学变换

OpenCV (iOS)中的形态学变换(11)相关推荐

  1. OpenCV-Python教程:形态学变换~腐蚀和膨胀(erode,dilate)

    原文链接:http://www.juzicode.com/opencv-python-erode-dilate 返回Opencv-Python教程 形态学变换是基于图像形状的变换过程,通常用来处理二值 ...

  2. opencv 其他形态学变换

    如何使用OpenCV函数 morphologyEx 进行形态学操作: 开运算 (Opening) 闭运算 (Closing) 形态梯度 (Morphological Gradient) 顶帽 (Top ...

  3. OpenCV之imgproc 模块. 图像处理(1)图像平滑处理 腐蚀与膨胀(Eroding and Dilating) 更多形态学变换 图像金字塔 基本的阈值操作

    图像平滑处理 目标 本教程教您怎样使用各种线性滤波器对图像进行平滑处理,相关OpenCV函数如下: blur GaussianBlur medianBlur bilateralFilter 原理 No ...

  4. opencv 膨胀_【3】OpenCV图像处理模块(5)更多的形态学变换(开、闭、形态梯度、顶帽、黑帽)...

    形态学变换有多种类型,上一节展示了最基本的腐蚀和膨胀.本节使用OpenCV提供的 cv::morphologyEx()函数实现多种形态学变换,如开运算.闭运算.形态学梯度.顶帽变换.黑帽变换等. 理论 ...

  5. opencv 形态学变换 morphologyEx函数

    opencv 形态学变换 morphologyEx函数 demo:http://download.csdn.net/detail/keen_zuxwang/9852594 高级形态学变换: 开运算: ...

  6. 在iOS中安装OpenCV

    在iOS中安装OpenCV 在iOS中安装 所需的包 使用CMake和命令行从源代码构建OpenCV 在iOS中安装 所需的包 CMake 2.8.8或更高 Xcode 4.2或更高版本 从Git存储 ...

  7. Python+OpenCV:形态学变换

    Python+OpenCV:形态学变换 理论 形态学变换是基于图像形状的一些简单操作. 它通常在二值图像上执行.它需要两个输入,一个是我们的原始图像,另一个是结构元素(structuring elem ...

  8. ios中常用的第三方库

    下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITableVie ...

  9. 教程 | OpenCV4中的极坐标变换

    极坐标变换就是将图像在直角坐标系与极坐标系中互相变换,形式如图3-26所示,它可以将一圆形图像变换成一个矩形图像,常用于处理钟表.圆盘等图像.圆形图案边缘上的文字经过及坐标变换后可以垂直的排列在新图像 ...

最新文章

  1. 代码确认小米官方在线预定——对代码实现的分析
  2. hdfs 备份数配置_大数据||HDFS HA配置详解
  3. Linux 进程后台运行
  4. 【C语言】能不能更快?
  5. 移动端-项目基础总结------彭记(020)
  6. 获取Linux服务器信息脚本
  7. R语言制作长三角城市群空间权重矩阵及作图显示
  8. 7-3 前序序列创建二叉树 (25 分) PTA
  9. linux启动supervisord服务,supervisord进程管理服务
  10. Discuz论坛超漂亮手机模板
  11. 斯嘉丽约翰逊60张pdf什么时间的?_巩俐入围威尼斯电影节的作品叫什么?巩俐为什么被称为女皇?...
  12. grub4dos linux live,grub4dos安装
  13. 关于virtualbox无法复制粘贴的问题
  14. 你依然是我心中最美丽的彩虹
  15. 错误解决:There is no screen to be resumed matching
  16. 通过虚拟机模拟linux操作系统
  17. 《阿凡达2》首周末IMAX全球票房4880万美元;康泰生物新冠疫苗纳入第二剂次加强免疫接种 | 美通企业日报...
  18. RT-Thread Studio 红外Infrared使用笔记
  19. 计算机华科与电子科技大学哪个好,华中科技大学、电子科技大学、中国科学技术大学,哪所实力最强?...
  20. 省赛题目(4月23日)の答案

热门文章

  1. 图解如何制作苹果OS X系统ISO光盘
  2. 怎么打败腾讯[纯讨论]
  3. NHibernate学习--初识NHibernate
  4. nignx处理Html中SSI技术代码注意事项
  5. resnet50结构_无需额外数据、Tricks、架构调整,CMU开源首个将ResNet50精度提升至80%+新方法
  6. ideajava目录显示类成员_面试:C++不可继承类
  7. ajax保存乱码,Ajax 乱码详细
  8. html5简介、选项输入框、表单元素分组、input新增属性及属性值
  9. 微信上了一个新功能,吐槽的人有点多
  10. 互联网日报 | 京东开启最大规模校招;特斯拉西部首个交付中心在蓉投入使用;嫦娥五号上升器点火起飞...