图像形态学

1、开操作(MORPH_OPEN)

结果图类似腐蚀图

先腐蚀后膨胀的过程,开操作可以帮助消除图像中的小的干扰区域,并且在平滑较大物体的边界的同时不明显改变其面积。

2、闭操作(MORPH_CLOSE)

结果图类似膨胀图

先膨胀后腐蚀的过程,闭操作可以帮助消除图像中的小的封闭区域。

3、形态学梯度(MORPH_GRADIENT)

膨胀图与腐蚀图之差,可以用形态学梯度来保留物体的边缘轮廓。

4、顶帽(MORPH_TOPHAT)

原图像与开运算的结果图之差,因为开运算会放大局部低亮度区域,因此效果图会突出比原轮廓周围更亮的区域。

5、黑帽(MORPH_BLACKHAT)

原图像与闭运算的结果图之差,因为闭运算会放大局部高亮度区域,因此效果图会突出比原轮廓周围更暗的区域,可以得到原图的轮廓。

6、morphologyEX函数

MORPH_OPEN – 开运算(Opening operation)

MORPH_CLOSE – 闭运算(Closing operation)

MORPH_GRADIENT -形态学梯度(Morphological gradient)

MORPH_TOPHAT - “顶帽”(“Top hat”)

MORPH_BLACKHAT - “黑帽”(“Black hat“)

//自定义核

Mat element = getStructuringElement(MORPH_ELLIPSE, Size(f * 2 + 1, f * 2 + 1));

//进行形态学操作

morphologyEx(src, dst2, MORPH_CLOSE, element);

相关程序

运行后通过在屏幕上输入对应指令完成相对应的形态学方法。

#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<vector>
#include<time.h>
#include<opencv2/core/core.hpp>
#include <iostream>
using namespace cv;
using namespace std;
//--------------------------------------【main( )函数】-----------------------------------------
//          描述:控制台应用程序的入口函数,我们的程序从这里开始执行
//-------------------------------------------------------------------------------------------------Mat src = imread("D:\\VC\\c++\\opencv源码\\opencv源码\\2.jpg");
Mat dst, dst1, dst2, dst3, dst4, dst5, dst6;
int p = 3;//膨胀初始值
int f = 4;//腐蚀初始值
int k = 3;//开运算初始值
int b = 3;//闭运算初始值
int x = 3;//形态学梯度初始值
int d = 3;//顶帽初始值
int h = 3;//黑帽初始值//膨胀回调函数
void on_p(int, void*)
{Mat element = getStructuringElement(MORPH_RECT, Size(p * 2 + 1, p * 2 + 1));morphologyEx(src, dst,MORPH_DILATE, element);imshow("膨胀图", dst);}//腐蚀回调函数
void on_f(int, void*)
{//自定义核Mat element1 = getStructuringElement(MORPH_RECT, Size(f * 2 + 1, f * 2 + 1));//进行形态学操作morphologyEx(src, dst1, MORPH_ERODE, element1);imshow("腐蚀图", dst1);
}//开运算回调函数
void on_k(int, void*)
{Mat element2 = getStructuringElement(MORPH_RECT, Size(k * 2 + 1, k * 2 + 1));morphologyEx(src, dst2, MORPH_OPEN, element2);imshow("开运算图", dst2);
}//闭运算回调函数
void on_b(int, void*)
{Mat element3 = getStructuringElement(MORPH_RECT, Size(b * 2 + 1, b * 2 + 1));morphologyEx(src, dst3, MORPH_CLOSE, element3);imshow("闭运算图", dst3);
}//形态学梯度回调函数
void on_x(int, void*)
{Mat element4 = getStructuringElement(MORPH_RECT, Size(x * 2 + 1,x * 2 + 1));morphologyEx(src, dst4, MORPH_GRADIENT, element4);imshow("形态学梯度图", dst4);
}//顶帽回调函数
void on_d(int, void*)
{Mat element5 = getStructuringElement(MORPH_RECT, Size(d * 2 + 1, d * 2 + 1));morphologyEx(src, dst5, MORPH_TOPHAT, element5);imshow("顶帽图", dst5);
}//黑帽回调函数
void on_h(int, void*)
{Mat element6 = getStructuringElement(MORPH_RECT, Size(h* 2 + 1, h* 2 + 1));morphologyEx(src, dst6,MORPH_BLACKHAT, element6);imshow("黑帽图", dst6);
}void print()
{cout << "******0:膨胀*********************" << endl;cout << "******1:腐蚀*********************" << endl;cout << "******2:开运算*******************" << endl;cout << "******3:闭运算*******************" << endl;cout << "******4:形态学梯度***************" << endl;cout << "******5:顶帽*********************" << endl;cout << "******6:黑帽*********************" << endl;cout << "******7:退出系统*****************" << endl;cout << "注意:进行其他指令请擦除上一个指令的图像" << endl;
}int main()
{print();cout << "————————————————" << endl;while (1){int method;cout << "*****请输入形态学方法************" << endl;cin >> method;if (method == 0){//膨胀namedWindow("膨胀图");createTrackbar("内核值", "膨胀图", &p, 20, on_p);on_p(p, 0);waitKey(0);}if (method == 1){//腐蚀namedWindow("腐蚀图");createTrackbar("内核值", "腐蚀图", &f, 20, on_f);on_f(f, 0);waitKey(0);}if (method == 2){//开运算namedWindow("开运算图");createTrackbar("内核值", "开运算图", &k, 20, on_k);on_k(k, 0);waitKey(0);}if (method == 3){//闭运算namedWindow("闭运算图");createTrackbar("内核值", "闭运算图", &b, 20, on_b);on_b(b, 0);waitKey(0);}if (method == 4){//形态学梯度运算namedWindow("形态学梯度图");createTrackbar("内核值", "形态学梯度图", &x, 20, on_x);on_x(x, 0);waitKey(0);}if (method == 5){//顶帽运算namedWindow("顶帽图");createTrackbar("内核值", "顶帽图", &d, 20, on_d);on_d(d, 0);waitKey(0);}if (method ==6){//黑帽运算namedWindow("黑帽图");createTrackbar("内核值", "黑帽图", &h, 20, on_h);on_h(h, 0);waitKey(0);}if (method == 7){return 0;break;}}return 0;
}

图像形态学(opencv),运行后通过在屏幕上输入对应指令完成相对应的形态学方法。相关推荐

  1. 候选人选票程序:设计一个候选人选票程序。假设有3个候选人,在屏幕上输入要选择的候选人姓名,有10个人进行投票,最后输出每个人的得票结果。

    候选人选票程序:设计一个候选人选票程序.假设有3个候选人,在屏幕上输入要选择的候选人姓名,有10个人进行投票,最后输出每个人的得票结果. 声明结构体类型并定义结构体变量.代码如下: struct ca ...

  2. 添加飞船图像:创建ship类与在屏幕上绘制飞船

    系列文章目录 一.Pygame的安装与项目规划 二.开始游戏项目:创建pygame窗口及响应用户输入 三.开始游戏项目:设置背景色和创建设置类 目录 系列文章目录 前言 添加飞船图像 创建ship类 ...

  3. 虚拟机安装redhat 9.0后,解决屏幕不能全屏以及避免鼠标来回切换的方法

    这个问题我看了网上好多解决的方法都是修改什么XFree86文件.然后让你注销并重新启动.但是在不安装 Vmware Tolls,这是不可行的.所以我最后的 解决办法是就是:安装Vmware Tolls ...

  4. 换屏后sim卡显示无服务器,话机屏幕上显示“插入SIM卡”、“SIM卡无效”、“请插入UIM卡”,“无法获得网络服务”或“紧急呼叫”...

    **问题现象:** 插入SIM卡后,话机屏幕上显示"插入SIM卡"."SIM卡无效"."请插入UIM卡","无法获得网络服务&qu ...

  5. 计算机屏幕水平移动,AOC、飞利浦电脑显示器屏幕上有一条竖线左右移动的终极解决方法...

    最近,一个用户自己的显示器遇到这个这样的问题,飞利浦显示器屏幕出现竖线,并且这个竖线还会左右移动,并且显示器屏幕左下角出现"Smartlmage on", 右下角出现"S ...

  6. windows更改服务名称_如何在Windows 10的登录屏幕上更改名称

    windows更改服务名称 Whenever you sign in to Windows 10, your full name appears above the password entry. Y ...

  7. win8如何锁定计算机,把文档或者应用固定锁在win8电脑的开始屏幕上的方法

    我们在win8系统的使用,看到有用户提问,可以把自己常用的软件或者文档固定在开始菜单的屏幕上吗?这样自己下次就可以快速的打开操作,是可以的哦,今天小编就来跟大家分享一下具体的把文档或者应用固定锁在wi ...

  8. android设备登录是什么手机_手机玩游戏屏幕太小,教你怎么一分钟把手机游戏画面投到大屏幕上...

    把手机投屏到电脑上会带来很多便捷之处,尽管市面上部分手机屏幕的尺寸够大,但还是有很多手机屏幕不能满足我们的日常需求,例如玩一些大型游戏,屏幕小玩得不尽兴,相信很多人都会思考,有没有一些方法,可以将我们 ...

  9. 快速上手Arduino -- 打印超声波模块测距信息到OLED屏幕上

    文章目录 快速上手Arduino -- 打印超声波模块测距信息到OLED屏幕上 实现效果: 模块说明: 引脚接线方法: 程序源码 附录 快速上手Arduino – 打印超声波模块测距信息到OLED屏幕 ...

最新文章

  1. python3安装pip3-python3及pip3安装
  2. mysql 分表全局id_MySQL分庫分表環境下全局ID生成方案
  3. VS Code运行C和C++程序
  4. 超好用!5款开源的移动自动化测试工具
  5. LeetCode 1261. 在受污染的二叉树中查找元素(树哈希)
  6. 某社交 App 涉黄被下架,真相令人窒息
  7. 安全客2017季刊-第3期
  8. 学微电子要学计算机哪种语言,微电子学与计算机,模板.doc
  9. solr 忽略大小写
  10. linux系统查看usb转串口驱动,Linux下使用USB转串口驱动的方法
  11. Computer:编程入门的简介相关的一些概念解释之详细攻略
  12. 一位老人告诉我的人生哲理
  13. 学习lua第一步-lua解释器luac.exe
  14. 8086汇编基础 debug mov al,'a'或者mov ax,'ab'错误的
  15. 算法基础——1.4常数变易法
  16. 返回查找对象所在列标_返回基础-这不是您要查找的对象...等等,哦,它是对象...
  17. QQ空间将不再支持免费备份原图?附QQ空间相册导出工具合集
  18. LAN、WAN、WLAN、VLAN的区别
  19. 什么样的投影仪好,家用便携式投影仪怎么选?
  20. SAP 公司代码与采购组织的分配关系

热门文章

  1. python 读取excel 内的中文显示为unicode 编码
  2. getIntExtra() 获取传递过来的int 值总是默认值
  3. RelativeLayout布局,不希望文本盖住其他组件
  4. 递归函数 集合 列表 元组
  5. mongodb之备份
  6. python基础(迭代器,生成器,装饰器)
  7. ubuntu 挂载 exfat 格式 U盘 mount:unknown filesystem type ‘exfat‘
  8. IDEA键盘突然失去响应
  9. cocos2d-x 3.10 PageView BUG
  10. :before和::before的区别