图像形态学(opencv),运行后通过在屏幕上输入对应指令完成相对应的形态学方法。
图像形态学
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),运行后通过在屏幕上输入对应指令完成相对应的形态学方法。相关推荐
- 候选人选票程序:设计一个候选人选票程序。假设有3个候选人,在屏幕上输入要选择的候选人姓名,有10个人进行投票,最后输出每个人的得票结果。
候选人选票程序:设计一个候选人选票程序.假设有3个候选人,在屏幕上输入要选择的候选人姓名,有10个人进行投票,最后输出每个人的得票结果. 声明结构体类型并定义结构体变量.代码如下: struct ca ...
- 添加飞船图像:创建ship类与在屏幕上绘制飞船
系列文章目录 一.Pygame的安装与项目规划 二.开始游戏项目:创建pygame窗口及响应用户输入 三.开始游戏项目:设置背景色和创建设置类 目录 系列文章目录 前言 添加飞船图像 创建ship类 ...
- 虚拟机安装redhat 9.0后,解决屏幕不能全屏以及避免鼠标来回切换的方法
这个问题我看了网上好多解决的方法都是修改什么XFree86文件.然后让你注销并重新启动.但是在不安装 Vmware Tolls,这是不可行的.所以我最后的 解决办法是就是:安装Vmware Tolls ...
- 换屏后sim卡显示无服务器,话机屏幕上显示“插入SIM卡”、“SIM卡无效”、“请插入UIM卡”,“无法获得网络服务”或“紧急呼叫”...
**问题现象:** 插入SIM卡后,话机屏幕上显示"插入SIM卡"."SIM卡无效"."请插入UIM卡","无法获得网络服务&qu ...
- 计算机屏幕水平移动,AOC、飞利浦电脑显示器屏幕上有一条竖线左右移动的终极解决方法...
最近,一个用户自己的显示器遇到这个这样的问题,飞利浦显示器屏幕出现竖线,并且这个竖线还会左右移动,并且显示器屏幕左下角出现"Smartlmage on", 右下角出现"S ...
- windows更改服务名称_如何在Windows 10的登录屏幕上更改名称
windows更改服务名称 Whenever you sign in to Windows 10, your full name appears above the password entry. Y ...
- win8如何锁定计算机,把文档或者应用固定锁在win8电脑的开始屏幕上的方法
我们在win8系统的使用,看到有用户提问,可以把自己常用的软件或者文档固定在开始菜单的屏幕上吗?这样自己下次就可以快速的打开操作,是可以的哦,今天小编就来跟大家分享一下具体的把文档或者应用固定锁在wi ...
- android设备登录是什么手机_手机玩游戏屏幕太小,教你怎么一分钟把手机游戏画面投到大屏幕上...
把手机投屏到电脑上会带来很多便捷之处,尽管市面上部分手机屏幕的尺寸够大,但还是有很多手机屏幕不能满足我们的日常需求,例如玩一些大型游戏,屏幕小玩得不尽兴,相信很多人都会思考,有没有一些方法,可以将我们 ...
- 快速上手Arduino -- 打印超声波模块测距信息到OLED屏幕上
文章目录 快速上手Arduino -- 打印超声波模块测距信息到OLED屏幕上 实现效果: 模块说明: 引脚接线方法: 程序源码 附录 快速上手Arduino – 打印超声波模块测距信息到OLED屏幕 ...
最新文章
- python3安装pip3-python3及pip3安装
- mysql 分表全局id_MySQL分庫分表環境下全局ID生成方案
- VS Code运行C和C++程序
- 超好用!5款开源的移动自动化测试工具
- LeetCode 1261. 在受污染的二叉树中查找元素(树哈希)
- 某社交 App 涉黄被下架,真相令人窒息
- 安全客2017季刊-第3期
- 学微电子要学计算机哪种语言,微电子学与计算机,模板.doc
- solr 忽略大小写
- linux系统查看usb转串口驱动,Linux下使用USB转串口驱动的方法
- Computer:编程入门的简介相关的一些概念解释之详细攻略
- 一位老人告诉我的人生哲理
- 学习lua第一步-lua解释器luac.exe
- 8086汇编基础 debug mov al,'a'或者mov ax,'ab'错误的
- 算法基础——1.4常数变易法
- 返回查找对象所在列标_返回基础-这不是您要查找的对象...等等,哦,它是对象...
- QQ空间将不再支持免费备份原图?附QQ空间相册导出工具合集
- LAN、WAN、WLAN、VLAN的区别
- 什么样的投影仪好,家用便携式投影仪怎么选?
- SAP 公司代码与采购组织的分配关系
热门文章
- python 读取excel 内的中文显示为unicode 编码
- getIntExtra() 获取传递过来的int 值总是默认值
- RelativeLayout布局,不希望文本盖住其他组件
- 递归函数 集合 列表 元组
- mongodb之备份
- python基础(迭代器,生成器,装饰器)
- ubuntu 挂载 exfat 格式 U盘 mount:unknown filesystem type ‘exfat‘
- IDEA键盘突然失去响应
- cocos2d-x 3.10 PageView BUG
- :before和::before的区别