2016-03-28 15 views
9

Aşağıdaki gibi bir resmim varsa, görüntünün genel yüksekliğini ve genişliğini artıracak şekilde orijinalin yüksekliğini ve genişliğini artıracak şekilde resmin etrafına nasıl kenarlık ekleyebilirim? görüntü ortada olduğu gibi kalır.opencv python'da görüntünün çevresine kenarlık ekleme

enter image description here

+2

Nasıl ([cv2.copyMakeBorder] hakkında http://docs.opencv.org/2.4/modules/imgproc/ doc/filtering.html # geçersiz% 20copyMakeBorder% 28InputArray% 20src,% 20OutputArray% 20dst,% 20int% 20top,% 20int% 20bottom,% 20int% 20left,% 20int% 20right,% 20int% 20borderType,% 20const% 20Scalar &% 20value % 29)? –

cevap

9

Aşağıdaki kod boyutu orijinal görüntünün dört tarafına 10 piksel sabit bir sınır ekler.

Renk için, görüntünün alt iki satırının ortalama değerinden hesapladığım arka planın ortalama gri değerini kullanmak istediğinizi varsaymıştım. Üzgünüz, biraz sabit kodlanmış, ama genel nasıl yapılır gösterir ve ihtiyaçlarınıza göre uyarlanabilir.

0 ile altta ve sağdaki değerleri sınırlarsanız, simetrik bir kenarlık bile elde edersiniz.

BORDER_DEFAULT, BORDER_REPLICATE, BORDER_WRAP gibi diğer değerler BORDER_TYPE için mümkündür. Daha fazla ayrıntı için

cf: 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

Öğreticiyi kullanma Kırmızı (karışık şekilde mavi olarak işaretlenmiş) değerinin [255, 0, 0] olması gerektiğini düşündüm. Ama aslında görüntü değeri renkleri olarak yüzer ile [1.0, 0, 0] oldu. – hum3

3

Bu deneyin:

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