首先我们来尝试将分片的图片复原为正常的图片
这里是六张切成小细条的图片,原本是一张大图的,现在我们用python将他们合并到一块,题外话图片来源于中华连环画,*http://www.zhlhh.com/* 这个网站内有很多优秀的连环画,而且大部分都是免费,推荐给大家
我的思路是用matlib读图片,因为matlib读出的图片格式是 numpy.ndarray matlib底层应该也是用numpy.ndarray来存储图片信息,这样我们只要处理numpy数组的拼接就可以,而numpy对数组数据的处理简直不要太灵活,这样我们只用把每张图片x坐标数据拼接起来就可以了。
import numpy as np import matplotlib.image as mpimg import matplotlib.pylab as plt # numpy进行图片拼接 # matplotlib 打开图像 imList=[] for i in range(1,7): impice=mpimg.imread("D:/藏经阁/连环画/白蛇传/"+str(i)+".png") imList.append(impice) im=np.concatenate(tuple(imList),axis=1) # print(im.shape,im.dtype,type(im)) mpimg.imsave("D:/藏经阁/连环画/白蛇传/1.jpeg",im) plt.figure(figsize=(10,10)) plt.imshow(im) plt.axis("off") plt.show()
numpy的concatenate方法介绍一下:concatenate()函数能一次合并多个数组,是数组拼接常用的方法,第一个参数是个tuple 可以是多个数组很方便
arr1=[1] arr2=[2] arr=np.concatenate((arr1,arr2)) print(arr)
结果是[1 2]他会转为ndarry类型的所以不会有逗号分隔,
我们的图片是三维的数组,每个像素相当于一个小的数组x轴一个维度,y轴一个维度
axis参数定义我们在哪个维度上合并数据,0的话直接元素追加相当于1维是相当于直接在列的层面上追加 arr[0],arr[1],arr[2]…
源码中的注释
>>> a = np.array([[1, 2], [3, 4]]) >>> b = np.array([[5, 6]]) >>> np.concatenate((a, b), axis=0) array([[1, 2], [3, 4], [5, 6]]) >>> np.concatenate((a, b.T), axis=1) array([[1, 2, 5], [3, 4, 6]]) >>> np.concatenate((a, b), axis=None) array([1, 2, 3, 4, 5, 6])
axis=0的话是y轴方向的拼接我选的这些图片最后的几张因为x轴上像素点多少不一致,如果需要纵向拼接的话还需要额外的处理选三张一致的展示一下结果如下
mpimg.imsave("D:/藏经阁/连环画/白蛇传/1.jpeg",im)
图片保存matplotlib模块,还有其他的方法,其他模块应该也有自己的方法,我也没探索完全