一直以来对Numpy的印象就是做矩阵运算的一个python模块,好似感觉就是在数学教学里面或者枯燥的科研里面用用,但是近来因为工作的原因解除到很多tensorflow的pipeline之后,发现numpy在深度学习里面几乎无处不在,尤其是在data的预处理上,还有一些模型的推断代码上更是如此。
鉴于此又恰好看到有些模型里面用到了numpy来合并几张图片的预处理方式。这里记一下 方便后面的学习。
图片说白了就是二维的像素矩阵,而像素就是rgb三维数组,所以思路就是这样,先用opencv读取每一张图片到一个numpy的array array的shape就是图片 (w,h,3) 然后长度w取和 宽度h取最大(因为是垂直方向的拼接)再np.zeros(sum(w),max(h),3) 最后把三个矩阵在垂直方向上赋值给新的zeros矩阵
代码如下:
#!/usr/bin/env python # -*- coding:utf-8 -*- import sys import cv2 import glob import numpy as np reload(sys) sys.setdefaultencoding('utf-8') image_dir = '/Users/andy/Downloads/testnumpy/*.png' def main(): images = [cv2.imread(image_file) for image_file in glob.glob(image_dir)] height = sum([image.shape[0] for image in images]) width = max([image.shape[1] for image in images]) output = np.zeros((height, width, 3)) y = 0 for image in images: h, w, d = image.shape output[y:y + h, 0:w] = image y += h cv2.imwrite("test.jpg", output) if __name__ == '__main__': main()