opencv API:
cv2.copyMakeBorder
示例代码:
import cv2
def letterbox(img,height=608,width=1088,
color=(127.5,127.5,127.5)):
shape=img.shape[:2] # shape=[height,width]
ratio=min(float(height)/shape[0],float(width)/shape[1])
newShape=(round(shape[1]*ratio),round(shape[0]*ratio)) #newShape=[width,height]
dw=(width-newShape[0])/2 # width padding
dh=(height-newShape[1])/2 #height padding
top,bottom=round(dh-0.1),round(dh+0.1)
left,right=round(dw-0.1),round(dw+0.1)
img=cv2.resize(img,newShape,interpolation=cv2.INTER_AREA) # resized no border
img=cv2.copyMakeBorder(img,top,bottom,left,right,cv2.BORDER_CONSTANT,value=color)
return img,ratio,dw,dh
if __name__=='__main__':
imgDir='/home/.../images/anni.jpg'
img=cv2.imread(imgDir)
cv2.imshow('raw',img)
imgRes,ratio,dw,dh=letterbox(img)
cv2.imshow("test",imgRes)
cv2.waitKey(0)
原图:
效果图(红色标示的灰色区域):