边界填充
涉及到的函数:copyMakeBorder(src, top, bottom, left, right, borderType, dst=None, value=None)
其中,填充类型borderType主要的有一下四种类型:
BORDER_CONSTANT :可以用指定的像素去填充图像边界,value可以是一个值,也可以是表示RGB的一个元组(value = (0,255,255))
具体填充方式如下:
BORDER_REPLICATE :就是用图像最边缘的像素进行填充
效果如下:
具体填充方式如下:
BORDER_WRAP:比如最下面的边界要用图像最上面的像素去填充,最左边的边界要用图像最右边的像素进行填充,同理,其他边界一样,比如下方这个图,仔细观察就可以明白这种填充方式。
具体填充方式:
BORDER_REFLECT:就是以图像边界为轴以镜像的方式(图像的边界像素也会被用来填充)将像素填充到需要填充的范围内。如下图所示:
具体方式如下图实验:
代码:
img_original = np.array([[0,0 ,0 ,0 ,0 ,0],
[1,69 ,52 , 32 ,44 ,3],
[1,63 ,83 , 38 ,63 ,3],
[1 ,36 ,37 , 36 ,37, 3],
[1,37 ,37 , 41 ,45 ,3],
[1,37 ,38 , 38 ,44 ,3],
[1, 42, 42, 36, 40, 3],
[1, 69, 52, 32, 44, 3],
[1, 63, 83, 38, 63, 3],
[1, 36, 37, 36, 37, 3],
[1, 37, 37, 41, 45, 3],
[2, 2, 2, 2, 2, 2]],dtype=np.uint8)
print("原来的图像img_original:",img_original)
#cv2.imshow("原来的图像img_original:",img_original)
#cv2.waitKey(0)
top,bottom,left,right = (3,3,3,3)
reflect = cv2.copyMakeBorder(img_original,top,bottom,left,right,borderType=cv2.BORDER_REFLECT)
img_reflect = np.asarray(reflect)
print("用reflect填充后的图像:",img_reflect)
实验结果:
原来的图像img_original:
用reflect填充后的图像:
BORDER_REFLECT_101:和BORDER_REFLECT其实是一样的,只不过是在填充的时候,不用图像的边界像素去镜像填充。具体填充方式如下图所示: