我是靠谱客的博主 拼搏航空,最近开发中收集的这篇文章主要介绍OpenCV之形态学操作(开运算与闭运算)一、 腐蚀与膨胀二、 开运算与闭运算三、梯度运算四、礼帽与黑帽五、其他OpenCV系列方法链接,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、 腐蚀与膨胀

OpenCV系列—本文底页有多个常用方法链接

1.1 腐蚀操作

import cv2
import numpy as np

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

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

Li_Hei.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 膨胀操作

膨胀一次原图对比:

# 膨胀1轮次之后
dilate = cv2.dilate(img, kernel, iterations=1)

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

原图膨胀一次效果图6:
在这里插入图片描述

那么做一次腐蚀后,再做膨胀的效果呢:

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

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

    膨胀之前图2,发现线条变粗,跟原图对比的线条相差无几,但是没了那些长须装的噪音,这就是开运算图7:
在这里插入图片描述

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

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次的结果展示,图8:

在这里插入图片描述

二、 开运算与闭运算

2.1 开运算

# 开:先腐蚀,再膨胀
img = cv2.imread('DataPreprocessing/img/Li_Hei.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,先腐蚀,再膨胀,利用cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)官方算子得到开运算结果图9:,这里可以与图7对比一下,有细微区别,是因为这里的kernel是(5, 5)更大。
在这里插入图片描述

2.2 闭运算

# 闭:先膨胀,再腐蚀
img = cv2.imread('DataPreprocessing/img/Li_Hei.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,先膨胀,再腐蚀,得到开运算结果图10:
在这里插入图片描述

三、梯度运算

拿原图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()

得到梯度运算结果图11:
在这里插入图片描述
在这里插入图片描述

四、礼帽与黑帽

4.1 礼帽

礼帽 = 原始输入-开运算结果
作用 : 取出亮度高的地方,开运算可以消除暗背景下的高亮区域,那么如果用原图减去开运算结果就可以得到原图中灰度较亮的区域(总结:分割出图像中比周围亮的长条或斑块区域。),所以又称白顶帽变换。
Li_Hei.png原图下载:
在这里插入图片描述

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

得到礼帽结果图12:
在这里插入图片描述

4.2 黑帽

黑帽 = 闭运算-原始输入
作用 : 取出亮度低的地方,闭运算可以删除亮背景下的暗区域,那么用原图减去闭运算结果就可以得到原图像中灰度较暗的区域(总结:分割出图像中比周围暗的长条或斑块区域。),所以又称黑底帽变换

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

得到礼帽结果图13:
在这里插入图片描述

五、其他OpenCV系列方法链接

  • OpenCV之图片预处理方法
  • OpenCV之形态学操作(开运算与闭运算)
  • OpenCV之图像梯度
  • OpenCV之图像轮廓
  • OpenCV之直方图均衡化

最后

以上就是拼搏航空为你收集整理的OpenCV之形态学操作(开运算与闭运算)一、 腐蚀与膨胀二、 开运算与闭运算三、梯度运算四、礼帽与黑帽五、其他OpenCV系列方法链接的全部内容,希望文章能够帮你解决OpenCV之形态学操作(开运算与闭运算)一、 腐蚀与膨胀二、 开运算与闭运算三、梯度运算四、礼帽与黑帽五、其他OpenCV系列方法链接所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部