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)

赶时间先不实现了,有没有更好的办法以后做图像更深入了可能会想到。

posted @ 2020-11-24 19:57  少年_不识愁滋味  阅读(714)  评论(0编辑  收藏  举报