在做智能识别方面的时候遇到了一些瓶颈,即对于一张清晰度足够高,目标却很小时,识别的效果不是很好。
这时可以首先将图片分割成3*3,一共九张图片,分别进行识别之后再进行图片的拼接。
首先是图片的分割,将图片分割之后保存在数组中
def img_divide(img):
#分割为3*3
weight=img.size[0]/3
height=img.size[1]/3
left = 0 #图片距离左边的宽度乘积值
top = 0 #图片距离上边的宽度乘积值
index = 0 #图片名
return_img=[]
for i in range(9):
if i == 3 or i ==6:
# 换行
top += 1
left = 0
a = weight * left # 图片距离左边的大小
b = height * top # 图片距离上边的大小
c = weight * (left + 1) # 图片距离左边的大小 + 图片自身宽度
d = height * (top + 1) # 图片距离上边的大小 + 图片自身高度
croping = img.crop((a,b,c,d))
index += 1
left += 1
return_img.append(croping)
return return_img
将这一个图片组分别识别了之后,再进行拼接
def image_concat(image_names):
""" image_names: list, 存放的是图片的绝对路径 """
# 1.创建一块背景布
image = image_names[0]
width, height = image.size
target_shape = (3*width, 3*height)
background = Image.new('RGBA', target_shape, (0,0,0,0,))
# 2.依次将图片放入背景中(注意图片尺寸规整、mode规整、放置位置)
for ind, image_name in enumerate(image_names):
img = image_name
img = img.resize((width, height)) # 尺寸规整
if img.mode != "RGBA": # mode规整
img = img.convert("RGBA")
row, col = ind//3, ind%3
location = (col*width, row*height) # 放置位置
background.paste(img, location) # 把图片粘贴上去
return background
看一下对比图
可以看到对于小目标检测的效果还是提高了不少的