目标:

  学习不同的形态操作 例如 腐蚀、膨胀、开运算、闭运算 等。

  我们要学习的函数有 cv2.erode(),cv2.dilate(),cv2.morphologyEx() 等。

原理 :
一般对二值化图像进行形态学转换操作。输入的第一个参数为原始图像;第二个参数为结构化元素(核),该参数决定操作性质。两个基本形态学操作是腐蚀膨胀,衍生出了开运算、闭运算、梯度运算等等

腐蚀 :
腐蚀操作会把前景物体的边缘腐蚀掉。原理是卷积核沿着图像滑动,如果与卷积核对应的原图像像素值都是1,那么中心元素保持原值,否则为0. 
效果,靠近前景的像素被腐蚀为0,前景物体变小,图像白色区域减少,对于去除白噪声很有用,可以断开两个连接在一起的物体。 
(图像当中的白噪声大概意思就是随机噪声)

如下5*5的卷积核

  1. import cv2
  2. import numpy as np
  3.  
  4. img = cv2.imread('9.jpg',0)
  5. kernel = np.ones((5,5),np.uint8)
  6. erosion = cv2.erode(img,kernel,iterations = 2)
  7.  
  8. cv2.imshow('img',img)
  9. cv2.imshow('ero',erosion)
  10.  
  11. cv2.waitKey(0)

左侧为腐蚀后的图像,iterations为迭代运算次数

膨胀 :
与腐蚀相反,卷积核当中只要有一个值是1,中心元素值就是1。此操作会增加前景中的白色区域,一般在去噪声的时候都是先腐蚀再膨胀,腐蚀的过程会使得前景变小,使用膨胀操作使前景变换回来。膨胀也可以使相互分离的物体连接。

  1. import cv2
  2. import numpy as np
  3.  
  4. img = cv2.imread('9.jpg',0)
  5. kernel = np.ones((5,5),np.uint8)
  6. dilation = cv2.dilate(img,kernel,iterations = 1)
  7.  
  8. cv2.imshow('img',img)
  9. cv2.imshow('dil',dilation)
  10.  
  11. cv2.waitKey(0)

左边为膨胀

开运算 :
就是先腐蚀再膨胀,一般用来去除噪声

函数是 cv2.morphologyEx()

  1. import cv2
  2. import numpy as np
  3.  
  4. img = cv2.imread('9.jpg',0)
  5. kernel = np.ones((5,5),np.uint8)
  6.  
  7. opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
  8.  
  9. cv2.imshow('img',img)
  10. cv2.imshow('opening',opening)
  11.  
  12. cv2.waitKey(0)

结果略

闭运算:

先膨胀再腐蚀,一般用来填充黑色的小像素点

  1. import cv2
  2. import numpy as np
  3.  
  4. img = cv2.imread('9.jpg',0)
  5. kernel = np.ones((5,5),np.uint8)
  6. closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
  7.  
  8. cv2.imshow('img',img)
  9. cv2.imshow('closing',closing)
  10.  
  11. cv2.waitKey(0)

形态学梯度

此为膨胀和腐蚀的差别,结果为前景轮廓

  1. import cv2
  2. import numpy as np
  3.  
  4. img = cv2.imread('9.jpg',0)
  5. kernel = np.ones((5,5),np.uint8)
  6. gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
  7.  
  8. cv2.imshow('img',img)
  9. cv2.imshow('gradient',gradient)
  10.  
  11. cv2.waitKey(0)

礼帽:

原始图像与开运算图像的差 

  1. import cv2
  2. import numpy as np
  3.  
  4. img = cv2.imread('9.jpg',0)
  5. kernel = np.ones((5,5),np.uint8)
  6. tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
  7.  
  8. cv2.imshow('img',img)
  9. cv2.imshow('tophat',tophat)
  10.  
  11. cv2.waitKey(0)

黑帽:

闭运算与原始图像的差(注意是闭运算减去原始图像,与礼帽不相反)

  1. blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
  • 1

结构化元素 
前面使用numpy构建结构化元素,都是正方形的核。如果要构建圆形或者椭圆形的核,可以使用 cv2.getStructuringElement()函数。 
参数填入形状和大小

  1. # 矩形核
  2. >>> cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
  3. array([[1, 1, 1, 1, 1],
  4. [1, 1, 1, 1, 1],
  5. [1, 1, 1, 1, 1],
  6. [1, 1, 1, 1, 1],
  7. [1, 1, 1, 1, 1]], dtype=uint8)
  8.  
  9. # 椭圆形核
  10. >>> cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
  11. array([[0, 0, 1, 0, 0],
  12. [1, 1, 1, 1, 1],
  13. [1, 1, 1, 1, 1],
  14. [1, 1, 1, 1, 1],
  15. [0, 0, 1, 0, 0]], dtype=uint8)
  16.  
  17. # 十字形核
  18. >>> cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))
  19. array([[0, 0, 1, 0, 0],
  20. [0, 0, 1, 0, 0],
  21. [1, 1, 1, 1, 1],
  22. [0, 0, 1, 0, 0],
  23. [0, 0, 1, 0, 0]], dtype=uint8)

python opencv入门-形态学转换的更多相关文章

  1. 【小工具系列】Python + OpenCV 图片序列转换成视频

    图片序列转换成视频 最近一直在找一个工具,能够将一堆图片转化成视频.网上找了一些小软件,还有 win10 的照片自带的视频制作功能,都不是很满意. 又不想下载那些专业的视频剪辑软件大材小用. 然后找到 ...

  2. OpenCV 入门

    1.入门攻略[安装用] https://www.cnblogs.com/linshuhe/p/5764394.html 2.VS2017配置opencv教程(超详细!!!) https://blog. ...

  3. OpenCV入门学习笔记

    OpenCV入门学习笔记 参照OpenCV中文论坛相关文档(http://www.opencv.org.cn/) 一.简介 OpenCV(Open Source Computer Vision),开源 ...

  4. python+opencv实现车牌定位

    写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验三,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验三. 由于时间紧张,代码没有进行任何优化, ...

  5. python opencv识别蓝牌车牌号 之 取出车牌号 (1/3)

    概述 车牌识别是计算机视频图像识别技术在车辆牌照识别中的一种应用,通常来讲如果结合opencv进行车牌识别主要分为四个大步骤,分别为: 图像采集 车牌定位 分割车牌字符 字符识别 当然,如果结合了机器 ...

  6. 【OpenCV入门教程之三】 图像的载入,显示和输出 一站式完全解析(转)

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/20537737 作者:毛星云(浅墨)  ...

  7. 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/19809337 作者:毛星云(浅墨 ...

  8. opencv ,亮度调整【【OpenCV入门教程之六】 创建Trackbar & 图像对比度、亮度值调整

    http://blog.csdn.net/poem_qianmo/article/details/21479533 [OpenCV入门教程之六] 创建Trackbar & 图像对比度.亮度值调 ...

  9. Python爬虫入门之正则表达式

    在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的 ...

随机推荐

  1. Windows下配置Nginx+php7

    第一部分:准备工作 第二部分:安装nginx 第三部分:安装php(这里主要讲nginx配置启动php,以cgi运行php)nginx配置文件是conf文件夹里的nginx.conf 在这里,我简单说 ...

  2. 小记 百度地图 soso地图 经纬度偏移

    项目里遇到了这么个问题,数据库原有数据是微信上用的,所以是soso地图坐标, 但是现在要做百度地图,坐标偏移严重,网上找了也没说偏移多少,自己手动测试10多分钟,得到个大概值,反正差不多就行了. so ...

  3. Jquery Ajax自定义无刷新提交表单Form

    Jquery的$.ajax方法可以实现ajax调用,要设置url,post,参数等. 如果要提交现有Form需要写很多代码,何不直接将Form的提交直接转移到ajax中呢. 以前的处理方法 如Form ...

  4. IIS 无法显示网页问题

    今天服务器上的项目突然无法访问,之前也碰到过,都是重启服务器解决的,因为重启IIS无效,另外检查发现w3wp.exe进程正常,其他端口及相关的都没什么问题,最后无奈只能想到用重启来解决了,今天又出现这 ...

  5. HDU 1535 Invitation Cards (最短路)

    题目链接 Problem Description In the age of television, not many people attend theater performances. Anti ...

  6. elasticsearch6.5集群环境搭建的一些坑

    都说el配置很简单,确实比solr简单多了,不用手动配置一大堆,不过第一次配置也不轻松,因为马虎老是漏掉了许多地方 配置一个半小时才启动成功: 这里主要记录一下一些遇到的坑: 一 不能用root启动, ...

  7. CodeForces 1096E: The Top Scorer

    一道经典组合数学+容斥题. 题目传送门:CF1096E. 题意简述: \(p\) 个人,每个人有得分 \(a_i\). 总得分 \(\sum a_i = s\). 第一个人得分 \(a_1 \ge r ...

  8. 系统架构之负载均衡【F5\nginx\LVS\DNS轮询\】

    在做系统架构规划的时候,负载均衡,HA(高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点,当活动节点出现故障的时候,由备用节点接管)都是经常需要考虑的 ...

  9. 将python脚本转换成exe文件--pyinstaller

    遇到的大坑: 直接运行python文件效果:         执行 pyinstaller  -F -w  -p  -i ./123.ico  ./main.py    在dict文件夹下生成exe文 ...

  10. 【轨迹动画css】不规则轨迹动画css教程,弹球,客服广告悬浮层都可以用

    小demo如下,可更具自己需求修改: css @keyframes animX{ 0% {left: 0px;} 100% {left: 500px;} } @keyframes animY{ 0% ...