web-dev-qa-db-fra.com

comment ajouter une bordure autour d'une image dans opencv python

Si j'ai une image comme ci-dessous, comment puis-je ajouter une bordure tout autour de l'image de sorte que la hauteur et la largeur globales de l'image finale augmentent mais que la hauteur et la largeur de l'image d'origine restent telles quelles au milieu.

enter image description here

24
Anthony

Le code suivant ajoute une bordure constante de taille 10 pixels aux quatre côtés de votre image d'origine.

Pour la couleur, j'ai supposé que vous vouliez utiliser la valeur moyenne de gris de l'arrière-plan, que j'ai calculée à partir de la valeur moyenne des deux dernières lignes de votre image. Désolé, un peu codé en dur, mais montre le mode d'emploi général et peut être adapté à vos besoins.

Si vous laissez les valeurs de bordures en bas et à droite à 0, vous obtenez même une bordure symétrique.

D'autres valeurs pour BORDER_TYPE sont possibles, telles que BORDER_DEFAULT, BORDER_REPLICATE, BORDER_WRAP.

Pour plus de détails, voir: http://docs.opencv.org/trunk/d3/df2/tutorial_py_basic_ops.html#gsc.tab=

import numpy as np
import cv2

im = cv2.imread('image.jpg')
row, col= im.shape[:2]
bottom= im[row-2:row, 0:col]
mean= cv2.mean(bottom)[0]

bordersize=10
border=cv2.copyMakeBorder(im, top=bordersize, bottom=bordersize, left=bordersize, right=bordersize, borderType= cv2.BORDER_CONSTANT, value=[mean,mean,mean] )

cv2.imshow('image',im)
cv2.imshow('bottom',bottom)
cv2.imshow('border',border)
cv2.waitKey(0)
cv2.destroyAllWindows()
25
tfv

Essaye ça:

import cv2
import numpy as np     

img=cv2.imread("img_src.jpg")
h,w=img.shape[0:2]

base_size=h+20,w+20,3
# make a 3 channel image for base which is slightly larger than target img
base=np.zeros(base_size,dtype=np.uint8)
cv2.rectangle(base,(0,0),(w+20,h+20),(255,255,255),30) # really thick white rectangle
base[10:h+10,10:w+10]=img # this works
10
Saransh Kejriwal

Répondre en une seule ligne

outputImage = cv2.copyMakeBorder(
                 inputImage, 
                 topBorderWidth, 
                 bottomBorderWidth, 
                 leftBorderWidth, 
                 rightBorderWidth, 
                 cv2.BORDER_CONSTANT, 
                 value=color of border
              )
5
Ishara Madhawa