首先我們來嘗試將分片的圖片複原為正常的圖片 這裡是六張切成小細條的圖片,原本是一張大圖的,現在我們用python將他們合併到一塊,題外話圖片來源於中華連環畫,*http://www.zhlhh.com/* 這個網站內有很多優秀的連環畫,而且大部分都是免費,推薦給大家 我的思路是用matlib讀圖片, ...
首先我們來嘗試將分片的圖片複原為正常的圖片
這裡是六張切成小細條的圖片,原本是一張大圖的,現在我們用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模塊,還有其他的方法,其他模塊應該也有自己的方法,我也沒探索完全