有時我們需要在圖片周圍加上邊界,方便卷積運算、保留細節,或製作特殊效果。
OpenCV 提供了 cv2.copyMakeBorder()
來快速幫影像添加不同形式的邊界。
和前幾天一樣,先準備一張彩色圖片(image.jpg)放在同一資料夾中:
import cv2
img = cv2.imread('image.jpg')
為了讓視窗停留方便觀察,記得最後加上:
cv2.waitKey()
cv2.destroyAllWindows()
使用 OpenCV 的 cv2.copyMakeBorder()
函數可以輕鬆為圖片添加邊界:
# 添加固定顏色邊界
border_img = cv2.copyMakeBorder(
img,
10, 20, 30, 40, # top, bottom, left, right(像素)
cv2.BORDER_CONSTANT, # 邊界模式:固定顏色
value=(0, 0, 255) # 邊界顏色(BGR:紅色)
)
cv2.imshow("Border Image", border_img)
img
:輸入圖片10, 20, 30, 40
:分別代表上、下、左、右要增加的像素數(可依需求調整)cv2.BORDER_CONSTANT
:邊界類型(此範例使用固定顏色)value=(0, 0, 255)
:邊界顏色(BGR 格式,例為紅色)輸出示意:
模式 | 說明 |
---|---|
cv2.BORDER_CONSTANT |
固定顏色填充 |
cv2.BORDER_REFLECT |
鏡像反射(不重複邊界像素) |
cv2.BORDER_REFLECT_101 |
鏡像反射(重複邊界像素) |
cv2.BORDER_REPLICATE |
邊緣像素複製 |
cv2.BORDER_WRAP |
影像環繞(像圓周接續) |
這些不同的邊界方式在影像處理中依需求靈活使用,能影響卷積運算結果或視覺效果。
下圖示範不同邊界模式的視覺差異:
modes = [
("CONSTANT", cv2.BORDER_CONSTANT),
("REFLECT", cv2.BORDER_REFLECT),
("REFLECT_101", cv2.BORDER_REFLECT_101),
("REPLICATE", cv2.BORDER_REPLICATE),
("WRAP", cv2.BORDER_WRAP)
]
for name, mode in modes:
b = cv2.copyMakeBorder(img, 20, 20, 20, 20, mode, value=(0, 0, 255))
cv2.imshow(name, b)
💡 小提醒:在顯示多個視窗時,過多視窗會蓋住彼此或造成排版混亂,可依需要儲存結果或只顯示單一模式。
cv2.copyMakeBorder()
是快速給影像添加邊界的實用函式,應用場景包括卷積前補齊、資料增強、視覺邊框製作等。
若要避免卷積時邊緣資訊遺失,可考慮使用 REFLECT 或 REPLICATE;若是要做視覺化邊框,則適合使用 CONSTANT(固定顏色)。
建議多嘗試不同的邊界寬度、模式與顏色,觀察對後續處理(如邊緣偵測、CNN 輸入)的影響。