Python+OpenCV之形态学操作详解

作者:锦鲤AI幸运 时间:2021-11-24 23:37:58 

一、 腐蚀与膨胀

1.1 腐蚀操作

import cv2
import numpy as np

img = cv2.imread('DataPreprocessing/img/dige.png')

cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

dige.png原图1展示(注: 没有原图的可以截图下来保存本地。):

Python+OpenCV之形态学操作详解

腐蚀1轮次之后~ (iterations = 1)

kernel = np.ones((3, 3), np.uint8)
erosion = cv2.erode(img, kernel, iterations=1)

cv2.imshow('erosion', erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()

腐蚀结果展示图2:

Python+OpenCV之形态学操作详解

腐蚀圆多次的效果,以及腐蚀原理

pie = cv2.imread('DataPreprocessing/img/pie.png')

cv2.imshow('pie', pie)
cv2.waitKey(0)
cv2.destroyAllWindows()

pie.png原图3:

Python+OpenCV之形态学操作详解

腐蚀原理, 其中滤波器的大小越大腐蚀的程度越大 图4:

Python+OpenCV之形态学操作详解

kernel = np.ones((30, 30), np.uint8)
erosion_1 = cv2.erode(pie, kernel, iterations=1)
erosion_2 = cv2.erode(pie, kernel, iterations=2)
erosion_3 = cv2.erode(pie, kernel, iterations=3)
res = np.hstack((erosion_1, erosion_2, erosion_3))
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

圆腐蚀三次结果展示图5:

Python+OpenCV之形态学操作详解

1.2 膨胀操作

kernel = np.ones((3, 3), np.uint8)
dige_dilate = erosion
dige_dilate = cv2.dilate(erosion, kernel, iterations=1)

cv2.imshow('dilate', dige_dilate)
cv2.waitKey(0)
cv2.destroyAllWindows()

膨胀之前图2,发现线条变粗,跟原图对比的线条相差无几,但是没了那些长须装的噪音,图6:

Python+OpenCV之形态学操作详解

膨胀圆多次的效果,以及膨胀原理与腐蚀相反,有白色点的滤波器则滤波器内数据全变为白色。

pie = cv2.imread('DataPreprocessing/img/pie.png')

kernel = np.ones((30, 30), np.uint8)
dilate_1 = cv2.dilate(pie, kernel, iterations=1)
dilate_2 = cv2.dilate(pie, kernel, iterations=2)
dilate_3 = cv2.dilate(pie, kernel, iterations=3)
res = np.hstack((dilate_1, dilate_2, dilate_3))
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

膨胀圆3次的结果展示,图7:

Python+OpenCV之形态学操作详解

二、 开运算与闭运算

2.1 开运算

# 开:先腐蚀,再膨胀
img = cv2.imread('DataPreprocessing/img/dige.png')

kernel = np.ones((5, 5), np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

cv2.imshow('opening', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()

将原图1,先腐蚀,再膨胀,得到开运算结果图8:

Python+OpenCV之形态学操作详解

2.2 闭运算

# 闭:先膨胀,再腐蚀
img = cv2.imread('DataPreprocessing/img/dige.png')

kernel = np.ones((5, 5), np.uint8)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

cv2.imshow('closing', closing)
cv2.waitKey(0)
cv2.destroyAllWindows()

将原图1,先膨胀,再腐蚀,得到开运算结果图9:

Python+OpenCV之形态学操作详解

三、梯度运算

拿原图3的圆,做5次膨胀,5次腐蚀,相减得到其轮廓。

# 梯度=膨胀-腐蚀
pie = cv2.imread('DataPreprocessing/img/pie.png')
kernel = np.ones((7, 7), np.uint8)
dilate = cv2.dilate(pie, kernel, iterations=5)
erosion = cv2.erode(pie, kernel, iterations=5)

res = np.hstack((dilate, erosion))

cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)

cv2.imshow('gradient', gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()

得到梯度运算结果图10:

Python+OpenCV之形态学操作详解

Python+OpenCV之形态学操作详解

四、礼帽与黑帽

4.1 礼帽

礼帽 = 原始输入-开运算结果

# 礼帽
img = cv2.imread('DataPreprocessing/img/dige.png')
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()

得到礼帽结果图11:

Python+OpenCV之形态学操作详解

4.2 黑帽

黑帽 = 闭运算-原始输入

# 黑帽
img = cv2.imread('DataPreprocessing/img/dige.png')
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('blackhat ', blackhat)
cv2.waitKey(0)
cv2.destroyAllWindows()

得到礼帽结果图12:

Python+OpenCV之形态学操作详解

来源:https://blog.csdn.net/qq_37700257/article/details/127039846

标签:Python,OpenCV,形态学,操作
0
投稿

猜你喜欢

  • Python os.mkdir()与os.makedirs()的使用区别

    2023-08-19 20:01:56
  • Python判断两个list是否是父子集关系的实例

    2021-08-17 07:16:18
  • ASP使用wsImage组件给图片加水印

    2008-12-29 19:14:00
  • PHP中单引号和双引号的区别详解

    2023-05-25 08:16:51
  • 用YSlow评分插件分析我们页面

    2008-08-26 11:48:00
  • python实现简易的学生信息管理系统

    2021-08-24 12:07:09
  • CSS 几条经典的 CSS Tips

    2008-08-20 18:40:00
  • 开展全面的网站评估

    2007-09-27 19:21:00
  • Python设计模式之抽象工厂模式原理与用法详解

    2023-01-25 16:05:43
  • 用python3 urllib破解有道翻译反爬虫机制详解

    2022-05-27 00:23:07
  • Python+Pillow+Pytesseract实现验证码识别

    2023-07-19 14:50:44
  • 好的Python培训机构应该具备哪些条件

    2022-06-22 14:52:57
  • Python爬虫实现“盗取”微信好友信息的方法分析

    2023-01-16 09:37:33
  • Shell脚本中通过正则表达式匹配IP地址

    2023-06-13 16:32:18
  • python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等

    2023-08-27 07:55:11
  • 了解WEB页面工具语言XML(四)应用分类

    2008-09-05 17:18:00
  • 自己收集比较强大的分页存储过程 推荐

    2011-11-03 17:10:20
  • python爬虫 正则表达式解析

    2022-07-16 18:24:01
  • Python批量启动多线程代码实例

    2021-09-01 04:41:16
  • 如何使用Python+ChatGPT批量生成论文

    2023-10-01 20:30:17
  • asp之家 网络编程 m.aspxhome.com