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)

趕時間先不實現了,有沒有更好的辦法以后做圖像更深入了可能會想到。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM