import cv2 import numpy as np img = cv2.imread('2.jpg', 0) rgb_planes = cv2.split(img) result_planes = [] result_norm_planes = [] for plane in rgb_planes: dilated_img = cv2.dilate(plane, np.ones((7, 7), np.uint8)) bg_img = cv2.medianBlur(dilated_img, 21) diff_img = 255 - cv2.absdiff(plane, bg_img) norm_img = cv2.normalize(diff_img, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC1) norm_img[norm_img > 200] = 255 result_norm_planes.append(norm_img) result_norm = cv2.merge(result_norm_planes) # 保存修改后的图片 cv2.imwrite('res.jpg', result_norm)
对于每一个颜色通道,它执行以下步骤:
- 对图像进行膨胀,使用的是 7x7 的单位矩阵作为卷积核。
- 对膨胀后的图像进行中值滤波,使用的是 21x21 的卷积核。
- 计算输入图像和中值滤波后的图像的差,将结果归一化到 0 到 255 之间。
- 将经过处理的图像添加到结果图像阵列 (result_planes) 和归一化结果图像阵列 (result_norm_planes) 中。