opencv-python图像处理(五)
形态学转换
cv2.erode() 腐蚀,卷积核沿着图像滑动,如果与卷积核对应的原图
像的所有像素值都是 1,那么中心元素就保持原来的像素值,否则就变为零
cv2.dilate() 膨胀,与卷积核对应的原图像的像素值中只要有一个是 1,中心元素的像素值就是 1
cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) 开运算,先进性腐蚀再进行膨胀
cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel) 闭运算,先进行膨胀再进行腐蚀
cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel) 梯度,图像梯度运算是膨胀图像减去腐蚀图像的结果
得到图像的轮廓,其中二值图像1表示白色点,0表示黑色点
cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel) 顶帽(或图像礼帽)运算是原始图像减去图像开运算的结果,
得到图像的噪声
cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel) 黑帽,进行闭运算之后得到的图像与原始图像的差
import cv2
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei' # 可以显示汉字
img = cv2.imread('bbb.jpg', 0)
kernel = np.ones((5, 5), np.uint8) # 卷积核
erosion = cv2.erode(img, kernel, iterations=1) # 腐蚀
dilation = cv2.dilate(erosion, kernel, iterations=1) # 膨胀
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) # 开运算
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel) # 闭运算
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel) # 梯度
top_hat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel) # 顶帽
black_hat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel) # 黑帽
plt.subplot(331), plt.imshow(img, 'gray'), plt.title('原图像')
plt.subplot(332), plt.imshow(erosion, 'gray'), plt.title('腐蚀')
plt.subplot(333), plt.imshow(dilation, 'gray'), plt.title('膨胀')
plt.subplot(334), plt.imshow(opening, 'gray'), plt.title('开运算')
plt.subplot(335), plt.imshow(gradient, 'gray'), plt.title('梯度')
plt.subplot(336), plt.imshow(top_hat, 'gray'), plt.title('顶帽')
plt.subplot(337), plt.imshow(black_hat, 'gray'), plt.title('黑帽')
plt.show()
opencv-python图像处理(一)
opencv-python图像处理(二)
opencv-python图像处理(三)
opencv-python图像处理(四)
opencv-python图像处理(五)
opencv-python图像处理(六)
opencv-python图像处理(七)
opencv-python图像处理(八)