Python+OpenCV之形态学操作详解

 更新时间:2022年09月28日 17:00:07   作者:锦鲤AI幸运  
这篇文章主要为大家详细介绍了Python OpenCV中的形态学操作(开运算、闭运算)的实现,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下

一、 腐蚀与膨胀

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展示(注: 没有原图的可以截图下来保存本地。):

腐蚀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:

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

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

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

pie.png原图3:

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

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:

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:

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

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:

二、 开运算与闭运算

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:

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:

三、梯度运算

拿原图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:

四、礼帽与黑帽

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:

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之形态学操作详解的详细内容,更多关于Python OpenCV形态学操作的资料请关注脚本之家其它相关文章!

相关文章

  • 只用Python就可以制作的简单词云

    只用Python就可以制作的简单词云

    今天教大家如何只用Python制作简单词云,文中有非常详细的介绍及代码示例,对正在学习python的小伙伴们很有帮助,需要的朋友可以参考下
    2021-06-06
  • Python使用scipy进行曲线拟合的方法实例

    Python使用scipy进行曲线拟合的方法实例

    这篇文章主要给大家介绍了关于Python使用scipy进行曲线拟合的相关资料,Scipy优化和拟合采用的是optimize模块,该模块提供了函数最小值(标量或多维)、曲线拟合和寻找等式的根的有用算法,需要的朋友可以参考下
    2022-05-05
  • 利用Python批量生成任意尺寸的图片

    利用Python批量生成任意尺寸的图片

    不知道大家有没有遇到过,因检验需要1000张,分别从1*1到1000*1000像素的图片。搜索一番过后发现还是Python实现比较方便,遂决定用Python实现这一功能,下面分享给大家,有需要的可以参考。
    2016-08-08
  • Python bisect模块原理及常见实例

    Python bisect模块原理及常见实例

    这篇文章主要介绍了Python bisect模块原理及常见实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • django模型查询操作的实现

    django模型查询操作的实现

    一旦创建好了数据模型,Django就会自动为我们提供一个数据库抽象API,允许创建、检索、更新和删除对象操作,本文就详细的介绍一下,感兴趣的可以了解一下
    2021-08-08
  • Python中字符串和列表去重方法总结

    Python中字符串和列表去重方法总结

    这篇文章主要为大家整理了Python中实现字符串和列表去重的常用方法,文中的示例代码讲解详细,对我们深入了解Python有一定的帮助,感兴趣的可以了解一下
    2023-04-04
  • Python从列表推导到zip()函数的5种技巧总结

    Python从列表推导到zip()函数的5种技巧总结

    在本篇文章里小编给大家整理的是关于Python从列表推导到zip()函数的5种技巧的相关知识点和代码,需要的朋友们参考学习下。
    2019-10-10
  • Python如何实现爬取B站视频

    Python如何实现爬取B站视频

    这篇文章主要介绍了Python如何实现爬取B站视频,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • python机器学习darts时间序列预测和分析

    python机器学习darts时间序列预测和分析

    这篇文章主要介绍了python机器学习darts时间序列预测和分析使用实例探索,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Python如何读写二进制数组数据

    Python如何读写二进制数组数据

    这篇文章主要介绍了Python如何读写二进制数组数据,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08

最新评论