如何在opencv python中添加图像边框

时间:2016-03-28 03:46:18

标签: python opencv computer-vision

如果我有如下图像,如何在图像周围添加边框,使最终图像的整体高度和宽度增加,但原始图像的高度和宽度保持原样在中间。

enter image description here

4 个答案:

答案 0 :(得分:20)

以下代码为原始图像的所有四个边添加一个大小为10像素的常量边框。

对于颜色,我假设您要使用背景的平均灰度值,我根据图像底部两行的平均值计算得出。对不起,有点硬编码,但显示了一般的操作方法,可以根据您的需要进行调整。

如果将bottomize和bottomize值保留为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()

答案 1 :(得分:9)

试试这个:

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

答案 2 :(得分:2)

一行答案

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

答案 3 :(得分:0)

使用openCV添加边框

import cv2
white = [255,255,255]
img1 = cv2.imread('input.png')
constant= cv2.copyMakeBorder(img1,20,20,20,20,cv2.BORDER_CONSTANT,value=white)
cv2.imwrite('output.png',constant)