::返回OpenCV算子速查表

OpenCV getStructuringElement

  • 1. 函数
    • 1.1 getStructuringElement
    • 1.2 morphologyEx
  • 1.3 erode
  • 1.4 dilate
  • 2. 例程
  • 2.1 图像处理效果
    • 原图
    • 二值化图像
    • 对二值化图像进行腐蚀、膨胀、开操作、闭操作
    • 梯度图
    • 顶帽和黑帽
    • 击中击不中
  • 2.2 代码

1. 函数

1.1 getStructuringElement

OpenCV官方文档getStructuringElement链接

  • getStructuringElement 是为了给形态学操作算子返回指定大小和形状的结构元素。
  • 当然你也可以自己构造一个任意的二进制掩码,并将其用作形态学处理函数的结构元素。
 Mat getStructuringElement(int shape,  //形状Size ksize, //尺寸Point anchor = Point(-1, -1) //锚点);
  • 参数 shape 是枚举变量 enum cv::MorphShapes

1.2 morphologyEx

OpenCV官方文档morphologyEx链接

  • 这其实是一个非常强大的函数,它可以通过调整参数 op 完成八种操作:腐蚀、膨胀、开运算、闭运算、顶帽、黑帽、梯度、击中击不中。
 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 是枚举变量 enum cv::MorphTypes

  • 对于腐蚀和膨胀,OpenCV还有专门的函数 erodedialte,它们和 morphologyEx 使用 MORPH_ERODEMORPH_DILATE 是完全相同的。
  • 所有操作都支持就地调用。对于多通道图像,每个通道是被独立处理的。
  • borderType :不支持BORDER_WRAP
  • 《学习OpenCV3》有这样的描述:尽管开和闭操作的效果与腐蚀相近,但这些新操作在保持连通域的精度上更加可靠。

1.3 erode

 void erode(InputArray src, OutputArray dst, InputArray kernel,Point anchor = Point(-1, -1), int iterations = 1,int borderType = BORDER_CONSTANT,const Scalar& borderValue = morphologyDefaultBorderValue());

1.4 dilate

 void dilate(InputArray src, OutputArray dst, InputArray kernel,Point anchor = Point(-1, -1),int iterations = 1,int borderType = BORDER_CONSTANT,const Scalar& borderValue = morphologyDefaultBorderValue());

2. 例程

2.1 图像处理效果

原图

二值化图像

对二值化图像进行腐蚀、膨胀、开操作、闭操作

  • 开操作和闭操作实际上就是腐蚀和膨胀的简单组合。
  • 开操作是先腐蚀后膨胀,常用于对二值图像中的区域进行计数。
  • 闭操作是先膨胀后腐蚀,作用于复杂连通分支算法中减少无用或噪声驱动的片段。对于连通分支,通常先进行腐蚀或闭操作消除噪声,然后通过开操作连接相互靠近的大型区域。
  • 尽管开和闭操作的效果与腐蚀相近,但这些新操作在保持连通域的精度上更加可靠。

梯度图

  • 形态学梯度 是 膨胀操作的结果(扩张亮域)减 腐蚀操作的结果(缩减亮域) ,这就是边缘。
  • 对于灰度图,其结果就是计算明暗变换的趋势。形态学梯度通常用于显示明亮区域的边界,然后便可以将他们看做目标或者目标的部分。用扩张的图像减去了收缩的图像,如此一来就找出了完整的边界。这与计算梯度不同,它不会关注某一个物体的周围。

顶帽和黑帽

  • 这两种操作分别用于显示与其邻域相比更亮或更暗的部分。当试图根据物体的亮度变化分离依附于物体的某些部分时,就会用到这些方法。
  • 顶帽作用源图像减去其开操作后的图像。开操作的效果是放大裂缝和局部小洞。因此用源图像减去开操作后的图像得到了比源图像更亮的环绕部分。
  • 黑帽操作显示的是比源图像更暗的环绕部分。

击中击不中

2.2 代码

#include "stdafx.h"
#include <opencv.hpp>
using namespace cv;
int main()
{Mat m_SrcImg = imread("./1.jpg", IMREAD_GRAYSCALE);imshow("原图", m_SrcImg);//阈值化操作Mat m_SrcImg2;threshold(m_SrcImg, m_SrcImg2, 100, 255, THRESH_BINARY_INV);imshow("原图2", m_SrcImg2);Mat m_DstImg;Mat elementRect = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1));Mat elementEllipse = getStructuringElement(MORPH_ELLIPSE, Size(5, 5), Point(-1, -1));int m_nIterations = 1;//腐蚀morphologyEx(m_SrcImg2, m_DstImg, MORPH_ERODE, elementEllipse, Point(-1, -1), m_nIterations);imshow("MORPH_ERODE", m_DstImg);//膨胀morphologyEx(m_SrcImg2, m_DstImg, MORPH_DILATE, elementEllipse, Point(-1, -1), m_nIterations);imshow("MORPH_DILATE", m_DstImg);//开操作morphologyEx(m_SrcImg2, m_DstImg, MORPH_OPEN, elementEllipse, Point(-1, -1), m_nIterations);imshow("MORPH_OPEN", m_DstImg);//闭操作 morphologyEx(m_SrcImg2, m_DstImg, MORPH_CLOSE, elementEllipse, Point(-1, -1), m_nIterations);imshow("MORPH_CLOSE", m_DstImg);//梯度 如果是空的Mat,则会被默认为是3×3的核morphologyEx(m_SrcImg2, m_DstImg, MORPH_GRADIENT, Mat(), Point(-1, -1), m_nIterations);imshow("MORPH_GRADIENT", m_DstImg);//顶帽 这里我使用了一个Mat的构造函数,自行创建了掩码,同样也可以作为形态学操作函数的结构化元素来使用   morphologyEx(m_SrcImg, m_DstImg, MORPH_TOPHAT, Mat(Size(11, 11), m_SrcImg.type()), Point(-1, -1), m_nIterations);imshow("MORPH_TOPHAT", m_DstImg);//黑帽 morphologyEx(m_SrcImg, m_DstImg, MORPH_BLACKHAT, Mat(Size(11, 11), m_SrcImg.type()), Point(-1, -1), m_nIterations);imshow("MORPH_BLACKHAT", m_DstImg);//击中击不中morphologyEx(m_SrcImg2, m_DstImg, MORPH_HITMISS, elementEllipse, Point(-1, -1), 1);imshow("MORPH_HITMISS", m_DstImg);waitKey(0);return 0;
}

OpenCV morphologyEx、erode、dilate、getStructuringElement (形态学算子)相关推荐

  1. opencv for python的图像梯度算子以及canny边缘检测

    opencv for python的图像梯度算子以及canny边缘检测 一.图像梯度算子: 二.Canny边缘检测(一个多级边缘检测算法): 一.图像梯度算子: 1.概念简介(部分引自百度百科): 图 ...

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

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

  3. (_cai_) opencv学习笔记(1):图像形态学计算的方式 morphology函数的应用

    1.腐蚀 概述:腐蚀掉图像的细节.若图像有很多毛刺,通过腐蚀操作,可以将毛刺消除. 下面所说的"值"可以简单理解为RGB三个通道[0,255],值越小,亮度越低,值越大,亮度越高. ...

  4. OPenCV膨胀函数dilate()的使用

    OPenCV版本:4.4 IDE:VS2017 功能描述 简述:使用一个指定的核元素去膨胀一个图像,图像膨胀的过程类似于一个卷积的过程,源图像矩阵A以及结构元素B,B在A矩阵上依次移动,每个位置上B所 ...

  5. Python-Opencv 形态学+算子实现轮廓提取

    1. 形态学 图像的形态学操作主要是腐蚀和膨胀,在原理上就是结构元和原图进行卷积操作,只不过原始卷积是进行计算,而腐蚀和膨胀是看结构元覆盖范围内1的情况. 1.1. 腐蚀与膨胀定义 腐蚀定义:若结构元 ...

  6. Opencv学习笔记四——图像形态学操作

    需要的库和自定义函数 import cv2 import numpy as np import matplotlib.pyplot as pltdef cv_show(name, mat):cv2.i ...

  7. OpenCV图像处理(2)——形态学操作

    形态学操作 Mat element = getStructuringElement(MORPH_RECT, Size(9, 9)); morphologyEx(InputImage, OutputIm ...

  8. opencv中的cv2.getStructuringElement()

    cv2.getStructuringElement( ) 返回指定形状和尺寸的结构元素. 这个函数的第一个参数表示内核的形状,有三种形状可以选择. 矩形:MORPH_RECT; 交叉形:MORPH_C ...

  9. c++gdal如何在大图像中截取小图像并获取其图像信息_【图像处理】OpenCV系列十 --- 边缘检测之Canny算子...

    上一篇我们学习了图像处理形态学相关知识点,相信大家学习之后已经对形态学有了足够的理解了,那么接下来,我们一起来学习一下图像处理中的边缘检测吧!我们将会重点学习边缘检测各种算子和滤波器 --- Cann ...

最新文章

  1. SpringCloud相关概念介绍
  2. Flutter 日期选择器与时间选择器
  3. windows tcp端口占满_TCP与UDP分析、三次握手四次断开、DDOS
  4. mysql语句大全(2)
  5. Angular 字符串替换
  6. 服务器文件怎么清理,文件传输服务器怎么清理内存
  7. C++和数据结构考试总结
  8. 安卓tv html,Emby for Android TV
  9. Emitter使用方法
  10. ubuntu播放不了本地视频
  11. SAP调用外围系统接口SXI_MONITOR有显示但是实际上没有调用接口的问题
  12. Logcat五种级别日志
  13. Python趣味篇:字符串中的趣味瞬间
  14. python处理时序数据总结
  15. yolov7运行自己的VOC格式数据集
  16. Arduino教程-11. PIR传感器
  17. ue4 改变枢轴位置_UE4虚幻引擎学习云笔记(五)-静态网格体编辑器
  18. 转载:天涯——散文天下——《劳动力短缺》——作者:南方孤驴
  19. android ext4 损坏,EXT4文件系统损坏导致的实例无法启动的排查与修复
  20. 可上网Linux,可以上网了

热门文章

  1. MySQL如何访问Postgres
  2. 配置web监控及报警
  3. Pulsar:一款功能强大的可视化网络足迹扫描平台
  4. CENTOS 7 YUM 没有可用的软件包 NGINX
  5. 【Python】检测字符串的方法
  6. 用R3写卡成PRL302,解决新电信卡PRL301只能1X不能上3G问题
  7. Jenkins+maven+SVN构建java项目中遇到的问题及解决
  8. 基于RabbitMQ消息队列的分布式事务解决方案 - MQ分布式消息中间件实战
  9. Spring Cloud 异常处理
  10. ORA-01795: 列表中的最大表达式数为1000的解决方法