2016-03-28 21 views
9

Se ho un'immagine come sotto, come posso aggiungere un bordo intorno all'immagine in modo che l'altezza e la larghezza complessive dell'immagine finale aumentino ma l'altezza e la larghezza dell'originale l'immagine rimane così com'è nel mezzo.come aggiungere un bordo attorno a un'immagine in opencv python

enter image description here

+2

Come su [cv2.copyMakeBorder] (http://docs.opencv.org/2.4/modules/imgproc/ doc/filtering.html # vuoto% 20copyMakeBorder% 28InputArray% 20src,% 20OutputArray% 20dst,% 20int% 20top,% 20int% 20bottom,% 20int% 20left,% 20int% 20right,% 20int% 20borderType,% 20const% 20Scalar &% 20value % 29)? –

risposta

9

Il codice seguente aggiunge un bordo costante di dimensioni 10 pixel a tutti e quattro i lati della vostra immagine originale.

Per il colore, ho assunto che si voglia utilizzare il valore medio di grigio dello sfondo, che ho calcolato dal valore medio delle due righe inferiori dell'immagine. Mi dispiace, un po 'difficile da codificare, ma mostra l'orientamento generale e può essere adattato alle tue esigenze.

Se si lasciano i valori di ridimensionamento per il fondo e destra a 0, si ottiene anche un bordo simmetrico.

Altri valori per BORDER_TYPE sono possibili, come BORDER_DEFAULT, BORDER_REPLICATE, BORDER_WRAP.

Per maggiori dettagli FC: http://docs.opencv.org/trunk/d3/df2/tutorial_py_basic_ops.html#gsc.tab=0

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() 
+0

Usando il tutorial ho pensato che il valore per Rosso (etichettato in modo confuso con Blue) dovrebbe essere [255, 0, 0]. Ma in realtà era [1.0, 0, 0] con float come i valori del valore dell'immagine. – hum3

3

provate questo:

import cv2  

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

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 
Problemi correlati