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))

OpenCV-腐蚀与膨胀操作 开运算闭运算 礼帽黑帽_第1张图片

OpenCV-腐蚀与膨胀操作 开运算闭运算 礼帽黑帽_第2张图片
核的大小对图的影响

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))

OpenCV-腐蚀与膨胀操作 开运算闭运算 礼帽黑帽_第3张图片
OpenCV-腐蚀与膨胀操作 开运算闭运算 礼帽黑帽_第4张图片

OpenCV-腐蚀与膨胀操作 开运算闭运算 礼帽黑帽_第5张图片

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()

OpenCV-腐蚀与膨胀操作 开运算闭运算 礼帽黑帽_第6张图片
OpenCV-腐蚀与膨胀操作 开运算闭运算 礼帽黑帽_第7张图片
OpenCV-腐蚀与膨胀操作 开运算闭运算 礼帽黑帽_第8张图片

膨胀操作

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

OpenCV-腐蚀与膨胀操作 开运算闭运算 礼帽黑帽_第9张图片

开运算闭运算

开运算:先腐蚀,再膨胀

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()

OpenCV-腐蚀与膨胀操作 开运算闭运算 礼帽黑帽_第10张图片
OpenCV-腐蚀与膨胀操作 开运算闭运算 礼帽黑帽_第11张图片
OpenCV-腐蚀与膨胀操作 开运算闭运算 礼帽黑帽_第12张图片

闭运算:先膨胀,再腐蚀

#闭:先膨胀,再腐蚀
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()

OpenCV-腐蚀与膨胀操作 开运算闭运算 礼帽黑帽_第13张图片

梯度运算

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()

OpenCV-腐蚀与膨胀操作 开运算闭运算 礼帽黑帽_第14张图片
OpenCV-腐蚀与膨胀操作 开运算闭运算 礼帽黑帽_第15张图片

礼帽和黑帽

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()

OpenCV-腐蚀与膨胀操作 开运算闭运算 礼帽黑帽_第16张图片

# 第三步:使用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()

OpenCV-腐蚀与膨胀操作 开运算闭运算 礼帽黑帽_第17张图片

你可能感兴趣的:(OpenCV,Python,opencv,python)