图片边界填充,以及填充方法对比:
1.#复制法:复制最边缘像素
2.#反射法:对像素在两边复制 fedcba |abcdefgh |hgfedcb
3.#反射法:以最边缘像素为轴,对称 gfedcb |abcdefgh |gfedcba 比上边的反射法更连贯,少了重复连接的像素点
4.#外包装法:
5.#常量法:常数值填充
import cv2# 默认读取格式为BGR
import matplotlib.pyplot as plt
import numpy as np
#图片显示
def cv_show(name,img):
cv2.imshow(name,img)
#等待时间,毫秒级,0表示任意键终止
cv2.waitKey(0)#任意键终止cv2.waitKey(1000)为显示1000ms
cv2.destroyAllWindows()
img = cv2.imread('text-photo.jpg')
# 边界填充
top_size,bottom_size,left_size,right_size = (50,50,50,50)
# 不同填充方法
replicat = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REPLICATE)#复制法:复制最边缘像素
reflect = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv2.BORDER_REFLECT)#反射法:对像素在两边复制 fedcba |abcdefgh |hgfedcb
reflect101 = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv2.BORDER_REFLECT_101)#反射法:以最边缘像素为轴,对称 gfedcb |abcdefgh |gfedcba 比上边的反射法更连贯,少了重复连接的像素点
wrap = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv2.BORDER_WRAP)#外包装法:
constant = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv2.BORDER_CONSTANT,value=0)#常量法:常数值填充
#绘图
plt.subplot(231)
plt.imshow(img,'gray')
plt.title('ORGINAL')
plt.subplot(232)
plt.imshow(replicat,'gray')
plt.title('REPLICATE')
plt.subplot(233)
plt.imshow(reflect,'gray')
plt.title('REFLECT')
plt.subplot(234)
plt.imshow(reflect101,'gray')
plt.title('REFLECT_101')
plt.subplot(235)
plt.imshow(wrap,'gray')
plt.title('WRAP')
plt.subplot(236)
plt.imshow(constant,'gray')
plt.title('CONSTANT')
运行结果: