#!/usr/bin/Python
# -*- coding: utf-8 -*-
import cv2
import numpy as np
from scipy.misc import imread
from PIL import Image
import os
'''
扩充图像边界
• src 输入图像
• top, bottom, left, right 对应边界的像素数目。
• borderType 要添加那种类型的边界,类型如下
– cv2.BORDER_CONSTANT 添加有颜色的常数值边界,还需要下一个参数(value)。
– cv2.BORDER_REFLECT 边界元素的镜像。比如: fedcba|abcde-fgh|hgfedcb
– cv2.BORDER_REFLECT_101 or cv2.BORDER_DEFAULT跟上面一样,但稍作改动。例如: gfedcb|abcdefgh|gfedcba
– cv2.BORDER_REPLICATE 重复最后一个元素。例如: aaaaaa|abcdefgh|hhhhhhh
– cv2.BORDER_WRAP 不 知 道 怎 么 说 了, 就 像 这 样: cdefgh|abcdefgh|abcdefg
• value 边界颜色,如果边界的类型是 cv2.BORDER_CONSTANT
'''
BLACK=[0,0,0]
dir = '/media/bdke/dataset/img'#图片所放路径
imgList = os.listdir(dir)
num_imgs = len(imgList)
print num_imgs
count = 0
for i in xrange(0,num_imgs):
count += 1
imgPath = os.path.join(dir,imgList[i])
#查看图片的宽和高
#im = Image.open(imgPath) # 返回一个Image对象
# print('宽:%d,高:%d' % (im.size[0], im.size[1]))
img = cv2.imread(imgPath)
replicate = cv2.copyMakeBorder(img, 200, 200, 200, 200, cv2.BORDER_CONSTANT, value=BLACK)#上下左右边缘扩充200个像素点
# newImgName = imgList[i][:-4] + "_ext.jpg"
newImgName = imgList[i][:-4] + ".jpg"#扩充后的图片名
dir_ext = '/media/bdke/dataset/ing_ext'#扩展之后图片的存放路径
result_path = os.path.join(dir_ext, newImgName)
cv2.imwrite(result_path, replicate)
#
# print('宽:%d,高:%d' % (im.size[0], im.size[1]))
# # 图片太小,扩展到500×500
# if im.size[0]<400 and im.size[1]<400:
# # img = np.array(imread(imgPath))
# img = cv2.imread(imgPath)
# # replicate = cv2.copyMakeBorder(img, 200, 200, 200, 200, cv2.BORDER_REPLICATE)
# replicate = cv2.copyMakeBorder(img, (400-im.size[1])/2, (400-im.size[1])/2, (400-im.size[0])/2, (400-im.size[0])/2, cv2.BORDER_CONSTANT,value = BLACK)
# newImgName = imgList[i][:-4]+"_ext.jpg"
# result_path = os.path.join(dir,newImgName)
# cv2.imwrite(result_path, replicate)
print count
扩充之前的图片:
用(0,0,0)黑色扩充之后的图片: