首先定义图像显示函数:
def cv_show(name, img):
cv2.imshow(name, img)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像读取:
img_cat = cv2.imread('cat.jpg')
定义图像填充的大小:
top_size, bottom_size, left_size, right_size = (50, 50, 50, 50)
接下来分别采用复制法、反射法、外包装法、常量法进行填充。
复制法:
# 复制法,复制最边缘像素
replicate = cv2.copyMakeBorder(img_cat, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
反射法:
# 反射法,对感兴趣的图像中的像素在两边进行复制
reflect = cv2.copyMakeBorder(img_cat, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REFLECT)
第二种反射法
# 反射法,也就是以最边缘像素为周,对称
reflect101 = cv2.copyMakeBorder(img_cat, top_size, bottom_size, left_size, right_size,
borderType=cv2.BORDER_REFLECT_101)
外包装法:
# 外包装法
warp = cv2.copyMakeBorder(img_cat, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_WRAP)
常量法:
# 常量法,常数值填充,此处填充灰色
constant = cv2.copyMakeBorder(img_cat, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_CONSTANT,
value=0)
输出结果对比如下:
首先读入原始图像:
pie = cv2.imread('pie.jfif')
定义卷积核:
kernel = np.ones((10, 10), np.uint8)
腐蚀函数:
dige_erosion = cv2.erode(pie, kernel=kernel, iterations=1)
输出结果如下:
膨胀函数:
dige_dilate = cv2.dilate(pie, kernel=kernel, iterations=1)
输出结果如下:
开运算:先腐蚀后膨胀
opening = cv2.morphologyEx(pie, cv2.MORPH_OPEN, kernel=kernel)
输出结果如下:
闭运算:先膨胀后腐蚀
closing = cv2.morphologyEx(pie, cv2.MORPH_CLOSE, kernel=kernel)
输出结果如下:
梯度:膨胀-腐蚀
gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)
输出结果如下:
礼帽:原始输入-开运算结果
tophat = cv2.morphologyEx(pie, cv2.MORPH_TOPHAT, kernel)
输出结果如下:
黑帽:闭运算-原始输入
blackhat = cv2.morphologyEx(pie, cv2.MORPH_BLACKHAT, kernel)
输出结果如下:
传入原始图像:
均值滤波:简单的平均卷积操作
blur = cv2.blur(cat, (3, 3))
方框滤波:基本和均值一样,可以选择归一化, normalize为true时就做归一化,和均值滤波一样
box = cv2.boxFilter(cat, -1, (3, 3), normalize=True)
normalize为False时不做归一化,及不做均值处理,越界后取255
box = cv2.boxFilter(cat, -1, (3, 3), normalize=False)
高斯滤波:高斯模糊的卷积核里的数值是满足高斯分布的,相当于更重视中间的
gaussian = cv2.GaussianBlur(cat, (3, 3), 1)
中值滤波:相当于用中值代替
median = cv2.medianBlur(cat, 3)