在對圖片進行卷積處理的時候,如果卷積模版(卷積內核)過大,且不對原圖的邊界進行擴充,會導致處理之后得到的圖片尺寸變的很小,也就是嚴重失真。
而擴充邊界有多種方法,本文就介紹一下這些填充方法。
-
這是原始圖像。
-
a = cv2.copyMakeBorder(img,50,50,50,50,cv2.BORDER_REPLICATE)
-
a = cv2.copyMakeBorder(img,50,50,50,50,cv2.BORDER_REFLECT)
-
a = cv2.copyMakeBorder(img,50,50,50,50,cv2.BORDER_REFLECT_101)
不知道有什么區別。
-
a = cv2.copyMakeBorder(img,50,50,50,50,cv2.BORDER_CONSTANT,value=[0,255,0])
假設src為以下矩陣
我們首先只在一個方向上,討論,例如 top方向:
top =5 或者 10, bottom =0,left 0,right =0;注意我們這里故意讓top的值,大於 src的rows,即行數。查看結果
borderType = BORDER_REFLECT:反射
解釋:當按BORDER_REFLECT,向上給src加邊界時,是按照src的反射機制來加的。
borderType = BORDER_REPLICATE:復制
解釋:當BORDER_REPLICATE時,代表只復制邊界。
當left=5,bottom =5時,
BORDER_TYPE = BORDER_REFLECT_101:
解釋:101,已經表明 0不參加反射機制。也即是以第一行為鏡面,做反射
示例代碼:
import cv2 pic_path = r'F:\temp\temp_0807\diff\coco_0717\JPEGImages\000000049901.jpg' img = cv2.imread(pic_path) tar_img = cv2.copyMakeBorder(img,0,50,0,50,cv2.BORDER_CONSTANT,value=[0,0,0]) cv2.imwrite(pic_path,tar_img)
原文鏈接:https://jingyan.baidu.com/article/e73e26c096074e24adb6a736.html
原文鏈接:https://blog.csdn.net/zhangping1987/article/details/51141658