OpenCV-腐蚀与膨胀操作 开运算闭运算 礼帽黑帽

腐蚀操作

import cv2
import numpy as np
img = cv2.imread('dige.png')

cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destoryAllWindows()

import cv2
import numpy as np
kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(img,kernel,iterations = 1)#kernel 传进来一个核,iterations = 1迭代次数

cv2.imshow('erosion',erosion)
cv2.waitKey(0)
cv2.destoryAllWindows()
erosion = np.hstack((img, erosion))

在这里插入图片描述

在这里插入图片描述
核的大小对图的影响

import cv2
import numpy as np
kernel = np.ones((3,3),np.uint8)
erosion = cv2.erode(img,kernel,iterations =3)#kernel 传进来一个核,iterations = 1迭代次数

cv2.imshow('erosion',erosion)
cv2.waitKey(0)
cv2.destoryAllWindows()
erosion = np.hstack((img, erosion))

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

import cv2
import numpy as np
pie = cv2.imread('pie.png')

cv2.imshow('pie',pie)
cv2.waitKey(0)
cv2.destoryAllWindows()
kernel = np.ones((20, 20), 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)
imgs = np.hstack((erosion_1, erosion_2, erosion_3))
cv2.imshow('pie', imgs)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

膨胀操作

dilate = cv2.dilate(erosion, kernel, iterations=1)
cv2.imshow('dilate', dilate)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

开运算闭运算

开运算:先腐蚀,再膨胀

1.cv2.morphologyEx(src, op, kernel) 进行各类形态学的变化

参数说明:src传入的图片,op进行变化的方式, kernel表示方框的大小

2.op = cv2.MORPH_OPEN 进行开运算,指的是先进行腐蚀操作,再进行膨胀操作

  1. op = cv2.MORPH_CLOSE 进行闭运算, 指的是先进行膨胀操作,再进行腐蚀操作
    开运算:表示的是先进行腐蚀,再进行膨胀操作

闭运算:表示先进行膨胀操作,再进行腐蚀操作

#先腐蚀,再膨胀
img =cv2.imread('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()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

闭运算:先膨胀,再腐蚀

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

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

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

在这里插入图片描述

梯度运算

1.op = cv2.GRADIENT 用于梯度运算-膨胀图像-腐蚀后的图像

梯度运算:表示的是将膨胀以后的图像 - 腐蚀后的图像,获得了最终的边缘轮廓

代码:

第一步:读取pie图片

第二步:进行腐蚀和膨胀操作

第三步:将膨胀的图像 - 腐蚀的图像,获得相减得图像

第四步:使用cv2.morphologyEx(src, cv2.GRADIENT, kernel) 获得梯度运算的图片的操作

第五步:绘制第三步和第四步生成的图片

import cv2
import numpy as np

# 第一步:读取图片
pie = cv2.imread('pie.png')
# 第二步:绘制腐蚀和膨胀图片
kernel = np.ones((5, 5), np.uint8)
erosion = cv2.erode(pie, kernel, iterations=2)
dilate = cv2.dilate(pie, kernel, iterations=2)
# 第三步:相减获得对应的图片 ,膨胀-腐蚀
decrease = dilate - erosion 
print(decrease.shape)
cv2.imshow('pie', pie)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 第四步:使用cv2.MORPH_GRADIENT获得梯度运算的图片
gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel, iterations=2)
# 第五步:绘制两者的图片
cv2.imshow('gradient', np.hstack((decrease, gradient)))
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述

礼帽和黑帽

import cv2
import numpy as np

# 第一步读入当前图片
img = cv2.imread('dige.png')
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 第二步:使用cv2.MORPH_TOPHAT获得礼帽图片
kernel = np.ones((3, 3), np.uint8)
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

# 第三步:使用cv2.MORPH_BLACKHAT获得黑帽图片 黑帽=闭运算-原始输入
kernel = np.ones((3, 3), np.uint8)
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('blackhat', blackhat)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值