python 图像拼接
1 import cv2 2 import numpy as np 3 import pandas as pd 4 from PIL import Image 5 6 img1 = cv2.imread('lena.bmp', cv2.IMREAD_GRAYSCALE) 7 cv2.namedWindow("lena", cv2.WINDOW_AUTOSIZE) 8 cv2.imshow("lena", img1) 9 print(img1.shape) 10 11 img2 = cv2.imread('Cameraman.bmp', cv2.IMREAD_GRAYSCALE) 12 cv2.namedWindow("Cameraman", cv2.WINDOW_AUTOSIZE) 13 cv2.imshow("Cameraman", img2) 14 print(img2.shape) 15 16 img3 = cv2.imread('house.tif', cv2.IMREAD_GRAYSCALE) 17 cv2.namedWindow("house", cv2.WINDOW_AUTOSIZE) 18 cv2.imshow("house", img3) 19 print(img3.shape) 20 21 def concat_pic(img): 22 # numpy连接 直接用numpy的ndarray数组合并方法concatenate() 23 img_01 = np.vstack(img) # 纵向连接 24 img_02 = np.concatenate(img, axis=1) # 1 横向连接 0 纵向连接 25 26 # pandas连接 先将图片由ndarray转换成dataframe格式,使用pandas的数据集连接方法concat()处理后,再由dataframe格式转回ndarray格式 27 # ndarray to dataframe 28 df = [] 29 for i in range(len(img)): 30 df.append(pd.DataFrame(img[i])) 31 dff = pd.concat(df, axis=1) # 1 横向连接 0 纵向连接 32 # dataframe to ndarray 33 img_03 = np.array(dff) 34 print(img_03.shape) 35 36 # 用opencv打开的图片是numpy.ndarray格式 37 cv2.namedWindow("hecheng", cv2.WINDOW_AUTOSIZE) 38 cv2.imshow("hecheng", img_03) 39 40 keyx = cv2.waitKey(0) 41 print(keyx) 42 if keyx == 27: 43 print("你按下了Esc键") 44 cv2.destroyAllWindows() 45 elif keyx == ord('s'): 46 print("你保存了这张图像") 47 cv2.imwrite("origin.png", img_03) 48 49 if __name__ == '__main__': 50 img = [img1, img2, img3] 51 concat_pic(img)
这只是用numpy 或 pandas 拼接了行或列,意思是只能横着接或者竖着接,如果想要m*n张图片该怎么拼接呢?
暂时的想法只是 比如说3*2一共六张图片,先三张 三张地横着拼成了两大张(2张3*1),然后两大张图片再竖着接成一张完整的图(3*2)
赶时间先不实现了,有没有更好的办法以后做图像更深入了可能会想到。