有时候我们需要对图像进行一些操作,比如数据集扩增,变形啥的,本期介绍对图片增加外边框等操作。
比如我们现在有图片如下:
这个是280*32像素大小的文字,如果用这个数据集去训练模型的话,肯定限制死了文本,导致只能在这个数据集上检测手写数字,而对于多行检测出来再识别,会因为尺寸不一致,而导致训练的识别的效果特别差,所以我们要在训练的时候,就让文本的尺寸多样化。这样才能使得模型有更好的泛化能力。
代码如下:
import cv2
import os
files = os.listdir('./1')
for i in files:
ss = './1/' + i
img = cv2.imread(ss)
img2 = cv2.copyMakeBorder(img,50,50,50,50, cv2.BORDER_CONSTANT,value=[0,255,0])
cv2.imshow('img2',img2)
cv2.waitKey(0)
通过读取图片添加外边界,达到扩增效果。
但是我们的数据集肯定是白底黑字的,这样才有更好的识别效果,所以我们修改演示为白色,再加个随机random尺寸,就可以得到不同尺寸的图片了。
import cv2
import os
import random
files = os.listdir('./1')
for i in files:
ss = './1/' + i
img = cv2.imread(ss)
img2 = cv2.copyMakeBorder(img,random.randint(0,10),random.randint(0,10),random.randint(0,10),random.randint(1,5), cv2.BORDER_CONSTANT,value=[0,255,0])
cv2.imshow('img2',img2)
cv2.waitKey(0)
import cv2
import os
import random
files = os.listdir('./1')
for i in files:
ss = './1/' + i
img = cv2.imread(ss)
img2 = cv2.copyMakeBorder(img,random.randint(0,10),random.randint(0,10),random.randint(0,10),random.randint(1,5), cv2.BORDER_CONSTANT,value=[255,255,255])
cv2.imshow('img2',img2)
cv2.waitKey(0)