OpenCV 图象腐蚀形态学操作 全家桶
图象腐蚀与形态学操作 opencv
1. 通过调用库函数实现图像的腐蚀、膨胀;
2. 通过设置结构元素、元素大小、形态学操作类型实现对图象的形态学操作。
源码(VS2017+OpenCV 4.0)
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/imgproc/types_c.h>
using namespace std;
using namespace cv; //全局变量
Mat src, res;
int slider = ;//腐蚀膨胀滑杆
const int slider_max = ;
int operation = ;//形态学操作类型
const int operation_max = ;
int kenl = ;//内核类型
const int kenl_max = ;
int kenl_size = ;//内核大小
const int kenl_size_max = ; //回调函数
void on_trackbar(int pos, void*);
//腐蚀
void getErodeAndDilate(int level, int pattern); //腐蚀
void getErodeAndDilate(int level, int pattern)
{
//进行腐蚀/膨胀
if(pattern == )
erode(src, res, Mat(), Point(-, -), level);
else if(pattern == )
dilate(src, res, Mat(), Point(-, -), level); imshow("处理结果1", res);
} //回调函数:腐蚀
void on_trackbar1(int pos, void*)
{
getErodeAndDilate(pos, );
} //回调函数:膨胀
void on_trackbar2(int pos, void*)
{
getErodeAndDilate(pos, );
} //回调函数:形态学操作类型
void on_trackbar3(int pos, void*)
{
int op = pos + ;
//选择内核形状
Mat elemment = getStructuringElement(kenl, Size( * kenl_size + , * kenl_size + )); morphologyEx(src, res, op, elemment);
imshow("处理结果2", res);
} int main()
{
string file = "D:\\trashBox\\testIMG\\monkey.jpg";
src = imread(file);
if (!src.data)
{
cout << "图片读取失败." << endl;
return ;
}
namedWindow("处理结果1");
//创建选择腐蚀次数的 trackbar
createTrackbar("腐蚀级数", "处理结果1", &slider, slider_max, on_trackbar1);
//创建选择膨胀次数的 trackbar
createTrackbar("膨胀级数", "处理结果1", &slider, slider_max, on_trackbar2); namedWindow("处理结果2");
//创建选择具体操作的 trackbar
createTrackbar("形态学操作\n开运算-0\n闭运算-1\n梯度-2\nTopHat-3\nBlackHat-4", "处理结果2", &operation, operation_max, on_trackbar3);
//创建选择内核形状的 trackbar
createTrackbar("结构元素:\n 0: Rect - 1: Cross - 2: Ellipse", "处理结果2", &kenl, kenl_max, on_trackbar3);
//创建选择内核大小的 trackbar
createTrackbar("内核大小:\n 2n +1", "处理结果2", &kenl_size, kenl_size_max, on_trackbar3); waitKey();
return ;
}
效果图
1. 图像腐蚀、膨胀





2. 形态学操作


其他组合操作,自己去探索吧,挺有趣的!
更多opencv中文资料,参考这里哟!
OpenCV 图象腐蚀形态学操作 全家桶的更多相关文章
- OpenCV学习笔记(六) 滤波器 形态学操作(腐蚀、膨胀等)
转自:OpenCV 教程 另附:计算机视觉:算法与应用(2012),Learning OpenCV(2009) 平滑图像:滤波器 平滑 也称 模糊, 是一项简单且使用频率很高的图像处理方法.平滑处理的 ...
- OPENCV形态学操作1
形态学操作是指基于形状的一系列图像处理操作,包括膨胀,腐蚀,二值化,开运算,闭运算,顶帽算法,黑帽算法,形态学梯度等,最基本的形态学操作就是膨胀和腐蚀. 一.膨胀 首先需要明确一个概念,膨胀和腐蚀都是 ...
- opencv中的图像形态学——腐蚀膨胀
腐蚀膨胀是图像形态学比较常见的处理,腐蚀一般可以用来消除噪点,分割出独立的图像元素等. 一般腐蚀操作对二值图进行处理,腐蚀操作如下图,中心位置的像素点是否与周围领域的像素点颜色一样(即是否是白色点,即 ...
- 【图像处理】OpenCV+Python图像处理入门教程(七)图像形态学操作
图像形态学主要从图像内提取分量信息,该分量信息通常对表达图像的特征具有重要意义.例如,在车牌号码识别中,能够使用形态学计算其重要特征信息,在进行识别时,只需对这些特征信息运算即可.图像形态学在目标视觉 ...
- opencv学习笔记(五)----图像的形态学操作
图像的形态学操作有基本的腐蚀和膨胀操作和其余扩展形态学变换操作(高级操作)-----开运算,闭运算,礼帽(顶帽)操作,黑帽操作...(主要也是为了去噪声,改善图像) 形态学操作都是用于处理二值图像(其 ...
- IP 基础知识全家桶,45 张图一套带走
前言 前段时间,有读者希望我写一篇关于 IP 分类地址.子网划分等的文章,他反馈常常混淆,摸不着头脑. 那么,说来就来!而且要盘就盘全一点,顺便挑战下小林的图解功力,所以就来个 IP 基础知识全家桶. ...
- opencv::形态学操作
形态学操作 开操作- open 闭操作- close 形态学梯度- Morphological Gradient 顶帽 – top hat 黑帽 – black hat 开操作- open 先腐蚀后膨 ...
- EOS基础全家桶(七)合约表操作
简介 本篇我们开始来为后续合约开发做准备了,先来说说EOS内置的系统合约的功能吧,本篇将侧重于合约表数据的查询,这将有利于我们理解EOS的功能,并可以进行必要的数据查询. EOS基础全家桶(七)合约表 ...
- EOS基础全家桶(十)交易Action操作
简介 区块链上的所有操作都是通过交易(Transaction)上链的,无论你是转账交易还是发起的智能合约的调用,而EOS和传统区块链不同的是EOS在一个交易里可以发起多个行为(Action),这使得E ...
随机推荐
- iOS-UITextField的使用
UITextField UITextField * accountField = [[UITextField alloc] initWithFrame:CGRectMake(85.0f, 60.0f ...
- socket 异步接收连接和接收数据
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- rsync参数说明
参数说明: log file = /var/log/rsyncd.log #日志文件位置,启动rsync后自动产生这个文件,无需提前创建 pidfile = /var/run/rsyncd.pid ...
- Egret入门学习日记 --- 第十一篇(书中 4.1~4.6节 内容)
第十一篇(书中 4.1~4.6节 内容) 好了,到了这篇开始,前三章都记录完了. 接下来就是到第四章了. 4.1节 的内容总结一下重点: 1.resource目录下default.res.json文件 ...
- (CVE-2017-7269 ) IIS6.0实现远程控制
简介 IIS 6.0默认不开启WebDAV,一旦开启了WebDAV,安装了IIS6.0的服务器将可能受到该漏洞的威胁 利用条件 Windows 2003 R2开启WebDAV服务的IIS6.0 环境搭 ...
- python3.7.3安装beautifulsoup4出现版本不兼容的问题
今天想安装一个beautifulsoup4,结果一直出错,好多教程总是有各种坑……找了很多个教程,为了记录方法也为了分享给大家,简单些一个.但是是真真不想再费劲写一遍了……直接贴链接,亲测有效,但是底 ...
- Spring 使用日志
1. spring boot项目默认使用什么技术处理日志? 实例代码 log.debug("===============================用户信息:", user) ...
- laydate年份选择,关闭底框,点击指定年份就选择然后关闭控件,翻页不选择也不关闭控件
如下图,翻页不选择也不关闭.点击指定年份时再选择和关闭控件 代码如下 // 默认没有选择,把判断赋值当前时间 var iYearCode = parseInt(new Date().getFullYe ...
- TCP调试助手,十六进制发送或者字符串形式发送的理解
"无论创作还是欣赏,都是对法则和规律的逃逸,自由是艺术的源泉"-- 黑格尔 TCP调试助手中,在发送时可以选择十六进制发送或者字符串形式发送! 其实,两者最终调用的都是系统的soc ...
- fiddler手机抓包1
1.手机抓包配置教程:https://www.jianshu.com/p/724097741bdf 2.