opencv之為影像添加邊界

  • 2019 年 10 月 9 日
  • 筆記

我們經常會有對影像邊緣做擴展的需求.比如

  • 希望卷積後得到的矩陣大小不變
  • 希望改變影像大小,但是不改變寬高比

opencv實現

opencv中使用copyMakeBorder()來完成這一功能
api

  • src是原影像矩陣
  • dst是新影像矩陣
  • top/bottom/left/right是邊界擴展的大小(比如5就代表5個像素)
  • borderType
  • value是擴充的像素填什麼值

borderType分兩種:

  • BORDER_CONSTANT
    邊緣填充用固定像素值,比如填充黑邊,就用0,白邊255
  • BORDER_REPLICATE
    用原始影像相應的邊緣的像素去做填充,看起來有一種把影像邊緣"拉糊了"的效果

opencv示例

import sys  import cv2 as cv    def 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",dst1)      cv.imshow("BORDER_REPLICATE",dst2)        if 27 == cv.waitKey():          cv.destroyAllWindows()    test()

效果如下: