python-----opencv圖像邊界擴充


在對圖片進行卷積處理的時候,如果卷積模版(卷積內核)過大,且不對原圖的邊界進行擴充,會導致處理之后得到的圖片尺寸變的很小,也就是嚴重失真。

而擴充邊界有多種方法,本文就介紹一下這些填充方法。

  1. 這是原始圖像。

    怎么擴充圖像的邊界(python-opencv)?
     
     
  2.  根據圖像的邊界的像素值,向外擴充圖片,每個方向擴充50個像素。

    a = cv2.copyMakeBorder(img,50,50,50,50,cv2.BORDER_REPLICATE)

    怎么擴充圖像的邊界(python-opencv)?
     
     
  3.  把靠近邊界的50個像素翻折出去(軸對稱):

    a = cv2.copyMakeBorder(img,50,50,50,50,cv2.BORDER_REFLECT)

    怎么擴充圖像的邊界(python-opencv)?
     
     
  4.  這是另一種折射:

    a = cv2.copyMakeBorder(img,50,50,50,50,cv2.BORDER_REFLECT_101)

    不知道有什么區別。

    怎么擴充圖像的邊界(python-opencv)?
     
     
  5. 常數填充:

    a = cv2.copyMakeBorder(img,50,50,50,50,cv2.BORDER_CONSTANT,value=[0,255,0])

    怎么擴充圖像的邊界(python-opencv)?
     
     
  6. a = cv2.copyMakeBorder(img,50,50,50,50,cv2.BORDER_WRAP)

    怎么擴充圖像的邊界(python-opencv)?

 

 

  假設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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM