图像的形态学操作有基本的腐蚀和膨胀操作和其余扩展形态学变换操作(高级操作)-----开运算,闭运算,礼帽(顶帽)操作,黑帽操作。。。(主要也是为了去噪声,改善图像)

形态学操作都是用于处理二值图像(其实也可以用于彩图,只是结果....)的,1位白,0位黑。。。

主要是基于卷积核的操作,设立一个指定大小的核,然后用这个核的中心点(默认的,可以修改)分别在每个像素点对照一遍,如果有与周围的值不同的改变值(1为0,0为1)就是腐蚀操作,

将周围像素的最大值赋给全部像素为膨胀操作,其他高级操作都是在腐蚀和膨胀的基础之上的操作。。

图像膨胀是图像腐蚀的逆运算


图像腐蚀操作

#图像腐蚀
#dst = cv.erode(src,kernel,iterations) # kennel卷积核 默认为3*3 iterations迭代次数 默认为1
img = cv.imread("E:/pictures/1.jpeg")
kernel = np.ones((5,5),np.uint8) #设置一个5*5的核
erode = cv.erode(img,kernel,iterations=9)
cv.imshow("orginal",img)
cv.imshow("erode",erode)
cv.waitKey()
cv.destroyAllWindows()

  


图像膨胀:

#图像膨胀
img = cv.imread("E:/pictures/erode.jpg",cv.IMREAD_UNCHANGED)
kernel = np.ones((5,5),np.uint8)
erode = cv.erode(img,kernel,iterations=1)
dilate = cv.dilate(erode,kernel,iterations=1)
cv.imshow("orginal",img)
cv.imshow("erode",erode)
cv.imshow("dilate",dilate)
cv.waitKey()
cv.destroyAllWindows()

  


开运算:先腐蚀后膨胀,用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。

#开运算         开运算=膨胀(腐蚀(img))
img = cv.imread("E:/pictures/close1.png")
kernel = np.ones((6,6),np.uint8)
morphologyEx = cv.morphologyEx(img,cv.MORPH_OPEN,kernel) #主要是MORPH_OPEN参数
cv.imshow("orginal",img)
cv.imshow("morphologyEx",morphologyEx)
cv.waitKey()
cv.destroyAllWindows()

  


闭运算:先膨胀后腐蚀,闭运算能够排除小的黑色区域。

#闭运算         开运算=腐蚀(膨胀(img))
img = cv.imread("E:/pictures/close1.png")
kernel = np.ones((7,7),np.uint8)
morphologyEx = cv.morphologyEx(img,cv.MORPH_CLOSE,kernel) #主要是MORPH_CLOSE参数
cv.imshow("orginal",img)
cv.imshow("morphologyEx",morphologyEx)
cv.waitKey()
cv.destroyAllWindows()

  


梯度运算:膨胀图与腐蚀图之差,通常用来保留边缘轮廓(不是轮廓和边缘识别)

#梯度运算        梯度运算=膨胀-腐蚀
img = cv.imread("E:/pictures/close1.png")
kernel = np.ones((7,7),np.uint8)
morphologyEx = cv.morphologyEx(img,cv.MORPH_GRADIENT,kernel) #主要是MORPH_GRADIENT# 参数
cv.imshow("orginal",img)
cv.imshow("morphologyEx",morphologyEx) #礼帽=原图-开运算 得到噪声
cv.waitKey() #黑帽=闭运算-原图 得到较小的点
cv.destroyAllWindows() #礼帽和黑帽操作都是参数的不同,就不一一上代码了 #MORPH_TOPHAT #MORPH_BLACKHAT

  

opencv学习笔记(五)----图像的形态学操作的更多相关文章

  1. 【opencv学习笔记五】一个简单程序:图像读取与显示

    今天我们来学习一个最简单的程序,即从文件读取图像并且创建窗口显示该图像. 目录 [imread]图像读取 [namedWindow]创建window窗口 [imshow]图像显示 [imwrite]图 ...

  2. [OpenCV学习笔记3][图像的加载+修改+显示+保存]

    正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识: [1.学习目标] 图像的加载:imread() 图像的修改:cvtColor() 图像的显 ...

  3. opencv学习笔记3——图像缩放,翻转和阈值分割

    #图像的缩放操作 #cv.resize(src,dsize,dst=None,,fx=None,fy=None,interpolation=None) #src->原图像,dsize->目 ...

  4. OpenCV学习笔记(十一) 轮廓操作

    在图像中寻找轮廓 首先利用Canny算子检测图像的边缘,再利用Canny算子的输出作为 寻找轮廓函数 findContours 的输入.最后用函数 drawContours 画出轮廓.边界Counto ...

  5. OpenCV学习笔记:矩阵的掩码操作

    矩阵的掩码操作很简单.其思想是:根据掩码矩阵(也称作核)重新计算图像中每个像素的值.掩码矩阵中的值表示近邻像素值(包括该像素自身的值)对新像素值有多大影响.从数学观点看,我们用自己设置的权值,对像素邻 ...

  6. OpenCV学习笔记(10)——图像梯度

    学习图像梯度,图像边界等 梯度简单来说就是求导. OpenCV提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel,Scharr和Lapacian.Sobel,Scharr其实就是求一阶或二阶导. ...

  7. [OpenCV学习笔记2][Mat数据类型和操作]

    [Mat数据类型和基本操作] ®.运行环境:Linux(RedHat+OpenCV3.0) 1.Mat的作用: Mat类用于表示一个多维的单通道或者多通道的稠密数组.能够用来保存实数或复数的向量.矩阵 ...

  8. OpenCV学习笔记(十) 直方图操作

    直方图计算 直方图可以统计的不仅仅是颜色灰度, 它可以统计任何图像特征 (如 梯度, 方向等等).直方图的一些具体细节: dims: 需要统计的特征的数目, 在上例中, dims = 1 因为我们仅仅 ...

  9. opencv学习笔记(七)---图像金字塔

    图像金字塔指的是同一图像不同分辨率的子图的集合,有向下取样金字塔,向上取样金字塔,拉普拉斯金字塔....它是图像多尺度表达的一种,最主要的是用于图像的分割 向下取样金字塔指高分辨率图像向低分辨率图像的 ...

随机推荐

  1. leetcode583

    public class Solution { public int MinDistance(string word1, string word2) { , word2.Length + ]; ; i ...

  2. spring中aop原理

  3. PHP配置数据库XML文件

    <?php $doc=new DOMDocument('1.0','utf-8'); //new一个dom对象 $doc->load("config.xml"); 加载 ...

  4. 公共技术点之 Java 反射 Reflection

    本文摘录地址: http://codekk.com/open-source-project-analysis/detail/Android/Mr.Simple/%E5%85%AC%E5%85%B1%E ...

  5. 基于 EntityFramework 的数据库主从读写分离架构(1) - 原理概述和基本功能实现

        回到目录,完整代码请查看(https://github.com/cjw0511/NDF.Infrastructure)中的目录:      src\ NDF.Data.EntityFramew ...

  6. c语言实践 判断一个数是不是素数

    int main() { int input = 0; scanf_s("%d",&input); if (input < 2) { printf("wro ...

  7. Windows Chocolatey

    一.简介 Chocolatey是Windows下包管理工具,可以使用 Chocolatey 来安装应用程序.   二.安装 1)在线安装:参见 主页 官网:https://chocolatey.org ...

  8. Mac anzhuangxgboost

    2. 从Github库安装XGBoost 第一步, 克隆最新的XGBoost到本地 git clone --recursive https://github.com/dmlc/xgboost 第二步, ...

  9. oracle数据库列的操作

    本章和大家分享一下如何在数据库中进行列的一些相关操作. 1.增加列名 (我们先来看一个原始版本) 下面我们增加一个列名tel  记住,增加列时需要把列对应的数据类型要说明,不然会报错. alter t ...

  10. jquery延时刷新

    setTimeout(function(){ location.replace(location.href); },1000);