2016-03-28 494 views
9

如果我有像下面这样的图像,如何在图像周围添加边框,以便最终图像的总体高度和宽度增加,但原始图像的高度和宽度图像保持原样在中间。如何在opencv图像中添加边框python

enter image description here

+2

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

回答

9

下面的代码将大小为10个像素,以原始图像的四边的恒定边界。

对于颜色,我假设你想使用背景的平均灰度值,我已经从图像底部两行的平均值计算出来。对不起,有点硬编码,但显示了一般的方法,可以适应您的需求。

如果您将底部和右侧的边界值设置为0,则您甚至会看到对称的边框。

BORDER_TYPE的其他值是可能的,例如BORDER_DEFAULT,BORDER_REPLICATE,BORDER_WRAP。

有关详细信息比照: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

使用本教程我认为红色(容易被标记为蓝色)的值应该是[255,0,0]。但实际上它是[1.0,0,0]与浮动图像值颜色。 – hum3

3

试试这个:

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 
相关问题