iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
佛心分享-IT 人自學之術

OpwnCV影像處理新手村系列 第 9

🚀 DAY 9:圖片邊界與填充|border、padding

  • 分享至 

  • xImage
  •  

有時我們需要在圖片周圍加上邊界,方便卷積運算、保留細節,或製作特殊效果。
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 格式,例為紅色)

輸出示意:
https://ithelp.ithome.com.tw/upload/images/20250910/2012948270ZLiQZYxb.png


📚 常見邊界模式說明

模式 說明
cv2.BORDER_CONSTANT 固定顏色填充
cv2.BORDER_REFLECT 鏡像反射(不重複邊界像素)
cv2.BORDER_REFLECT_101 鏡像反射(重複邊界像素)
cv2.BORDER_REPLICATE 邊緣像素複製
cv2.BORDER_WRAP 影像環繞(像圓周接續)

這些不同的邊界方式在影像處理中依需求靈活使用,能影響卷積運算結果或視覺效果。

下圖示範不同邊界模式的視覺差異:
https://ithelp.ithome.com.tw/upload/images/20250910/201294828vWzRWh77f.png


📝 進階示範:動態產生並顯示多種邊界

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() 是快速給影像添加邊界的實用函式,應用場景包括卷積前補齊、資料增強、視覺邊框製作等。

若要避免卷積時邊緣資訊遺失,可考慮使用 REFLECTREPLICATE;若是要做視覺化邊框,則適合使用 CONSTANT(固定顏色)。

建議多嘗試不同的邊界寬度、模式與顏色,觀察對後續處理(如邊緣偵測、CNN 輸入)的影響。


上一篇
🚀 DAY 8:圖片裁切與 ROI 操作
下一篇
🚀 DAY 10:圖片加解密|bitwise_xor 影像加密與解密
系列文
OpwnCV影像處理新手村14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言