深度学习之数据增强一(opencv图像填充)

本文目的:将所有图像等比例缩放到小于224x224x3,然后再对不足224x224x3部分填充黑边,达到所有图片都是224x224x3的规格。
本人才疏学浅,也不知道如何准确论证为何填充黑边是有效的行为,反正,亲测效果十分明显。

import cv2
f = open("img_path.txt")    #读取存放图像文件的文本文件
i = 1
for name in f:
    name = name.split("\n")[0]   #根据自己txt文件格式来读取图像路径
    img = cv2.imread(name)     #opencv读取图片
    heigth,width = img.shape[0],img.shape[1]   #获取图片的长和宽
    n = 1
    while True:
    	#等比例缩小图片
        new_heigth = heigth/n 
        new_width = width/n
        #如果小于224x224,那么进行填充以及保存处理
        if (new_heigth <=224) and (new_width <=224):
            image = cv2.resize(img, (int(new_heigth), int(new_width)))
            a = int((224 - new_width) / 2)
            b = int((224 - new_heigth) / 2)
            #进行黑边填充,关于该语句的详细解读看附录
            image = cv2.copyMakeBorder(image, a, a, b, b, cv2.BORDER_CONSTANT, value=[0, 0, 0]) 
            cv2.imwrite("saved_image_file\\"+str(i)+".jpg", image)
            #打印保存成功
            print("save {}.jpg successful !".format(i))
            i += 1
            break
            #处理长宽不统一的情况
        elif (new_heigth <=224) and (new_width > 224):
            n += 1
            new_width = width / n
        elif (new_heigth > 224) and (new_width <= 224):
            n += 1
            new_heigth = heigth/n
        n += 1

其实只是一些python语句和opencv的语句在运用而已,并无多少难度,但是有一句有必要详细说明。

image = cv2.copyMakeBorder(image, a, a, b, b, cv2.BORDER_CONSTANT, value=[0, 0, 0]) 

首先cv2.copyMakeBorder(),看到这个名字也能盲猜是填充边界。
而参数有以下这些
深度学习之数据增强一(opencv图像填充)_第1张图片
其中borderType则是图片填充方式:有如下几种
cv2.BORDER_CONSTANT:填充边界时使用常数填充
cv2.BORDER_REPLICATE:使用边界最接近的像素填充,也就是用边缘像素填充
cv2.BORDER_REFLECT:反射法,是指对图像的像素两边进行复制
cv2.BORDER_REFLECT101:反射法,把边缘的像素作为轴,对称的复制
cv2.BORDER_WRAP:用另一边的像素进行填充


而value=[ , , ]的三个值在0~255之间,分别过红绿蓝(RGB)。
eg:[0,225,0]则填充绿色。

你可能感兴趣的:(深度学习,python,opencv,深度学习)