我們經常會有對圖像邊緣做擴充的需求.比如
- 希望卷積後得到的矩陣大小不變
- 希望改變圖像大小,但是不改變寬高比
opencv實作
opencv中使用copyMakeBorder()來完成這一功能
api

- src是原圖像矩陣
- dst是新圖像矩陣
- top/bottom/left/right是邊界擴充的大小(比如5就代表5個像素)
- borderType
- value是擴充的像素填什麼值
borderType分兩種:
- BORDER_CONSTANT
- 邊緣填充用固定像素值,比如填充黑邊,就用0,白邊255
- BORDER_REPLICATE
- 用原始圖像相應的邊緣的像素去做填充,看起來有一種把圖像邊緣"拉糊了"的效果
opencv示例
import sysimport cv2 as cvdef test(): src = cv.imread("/home/sc/disk/keepgoing/opencv_test/lights.jpeg") top = int(0.05 * src.shape[0]) # shape[0] = rows bottom = top left = int(0.04 * src.shape[1]) # shape[1] = cols right = left value = [0,0,0] borderType = cv.BORDER_CONSTANT dst1 = cv.copyMakeBorder(src, top, bottom, left, right, borderType, None, value) borderType = cv.BORDER_REPLICATE dst2 = cv.copyMakeBorder(src, top, bottom, left, right, borderType, None, value) cv.imshow("blackborder