形态学操作

1.连通性的两个必要性条件是指两个图像的位置是否相邻,他们的灰度值是否符合相似准则

2.膨胀和腐蚀:其实就是将图像的高亮区域变大和变小,膨胀是变大,腐蚀是变小

膨胀通过cv.dilate(img,kernel,iterational)来实现

参数:

img:图像名称

kernel:核结构即核函数,kernel = np.ones((5,5),np.uint8)#(5,5)表示比例,np.uint8是指数据类型

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img1 = cv.imread('image1.jpg',1)
#获取核函数kernel
kernel = np.ones((5,5),np.uint8)
#获取膨胀图像后的变量
img_dilate = cv.dilate(img1,kernel,1)#iteration膨胀次数默认为1
plt.imshow(img_dilate[:,:,::-1])
plt.show()
#获取腐蚀图像后的变量
img_dilate = cv.erode(img1,kernel,1)#iteration膨胀次数默认为1
plt.imshow(img_erode[:,:,::-1])
plt.show()

2.开闭运算:  开闭运算就是像膨胀和腐蚀按照一定顺序来处理的

开运算就是先腐蚀后膨胀,也就是消除小区域的小白点

闭运算就是先膨胀后腐蚀,消除空洞也就是小黑点

API:cv.morplyEx(img,op,kernel)

参数:op:处理运算:如果是开运算就是MORPH_OPEN,闭运算是MORPH_CLOSE

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img1 = cv.imread('image1.jpg',1)
plt.imshow(img1[:,:,::-1])
plt.show()
#开运算
kernel = np.ones((5,5),np.uint8)
Open = cv.morphologyEx(img1,cv.MORPH_OPEN,kernel)
plt.imshow(Open[:, : , ::-1])
plt.show()
#闭运算
kernel = np.ones((5,5), np.uint8)
Close = cv.morphologyEx(img1,cv.MORPH_CLOSE,kernel)
plt.imshow(Open[:, :, ::-1])
plt.show()

3.黑帽运算和礼帽运算:

礼帽运算就是分离临近去高亮部分

黑帽运算就是分离临近区暗黑部分

API:cv。morphologyEx(img,op,kernel)

参数:img:要处理的图像

op:方式:

礼帽运算:cv,MORPH_TOPATH

黑帽运算:cv,MORPH_BLACKHAT

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img1 = cv.imread('image1.jpg',1)
plt.imshow(img1[:,:,::-1])
plt.show()
#黑帽运算
kernel = np.ones((5,5),np.uint8)
Open = cv.morphologyEx(img1,cv.MORPH_OPEN,kernel)
black = cv.morphologyEx(Open,cv.MORPH_BLACKHAT,kernel)
plt.imshow(black[:, : , ::-1])
plt.show()
#礼帽运算
kernel = np.ones((5,5), np.uint8)
Close = cv.morphologyEx(img1,cv.MORPH_CLOSE,kernel)
top = cv.morphologyEx(Close,cv.MORPH_TOPHAT,kernel)
plt.imshow(top[:, :, ::-1])
plt.show()

 

posted @ 2021-08-07 22:22  求知律己  阅读(69)  评论(0编辑  收藏  举报