導入 python 庫
1
2
3
|
import matplotlib.pyplot as plt import skimage.io as io import numpy as np |
查看需要拼接的圖片
因為工作需要,所以就不使用昨天晚上的圖片了。
我就拿了兩張截圖作為示例演示。
首先看看拼接前的圖片是什么樣子:
1
2
3
|
jzg = io.imread( 'jzg.jpg' ) # np.ndarray, [h, w, c], 值域[0, 255], RGB plt.imshow(jzg) #查看圖片 plt.show() |
解釋說明:“jzg”保存的是numpy的數組。
1
2
3
|
lgz = io.imread( 'lgz.jpg' ) # np.ndarray, [h, w, c], 值域[0, 255], RGB plt.imshow(lgz) plt.show() |
因為我使用的是 jupyter Notebook,所以圖片顯示的不是太清晰。
查看一下圖片的大小和數組元素的數據類型。
1
2
3
4
|
print (jzg.shape) #查看圖片的大小 print (jzg.dtype) #查看數組元素數據類型 print (lgz.shape) print (lgz.dtype) |
輸出:
(720, 1280, 3)
uint8
(720, 1280, 3)
uint8
(720, 1280, 3)表示的是數組的大小,物理意義為[h, w, c],分別是圖片的高度h,圖片的寬度w,圖片的通道數c。
可以看出兩者的大小完全一致,數組元素的數據類型為“uint8”。
查看數組中元素的值域:
1
|
print ([jzg. min (), jzg. max ()]) |
輸出:
[0, 255]
橫向拼接
創建拼接用的數組:
1
2
3
4
|
pj1 = np.zeros(( 720 , 1280 + 1280 , 3 )) #橫著拼接 pj1[:,: 1280 ,:] = jzg.copy() #圖片jzg在左 pj1[:, 1280 :,:] = lgz.copy() #圖片lgz在右 print (pj1.dtype) #查看數組元素類型 |
輸出:
float64
可以看出拼接后的數據類型不一樣了,所以要改一下,不然顯示的就是錯誤的。
1
2
3
|
pj1 = np.array(pj1,dtype = np.uint8) #將pj1數組元素數據類型的改為"uint8" plt.imshow(pj1) #查看拼接情況 plt.show() |
保存拼接后的圖片
將拼接后的圖片保存在當前目錄下,也可以改為其它的路徑。
1
|
io.imsave( 'pj1.jpg' , pj1) #保存拼接后的圖片 |
總結
橫向拼接的代碼總結如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
import matplotlib.pyplot as plt import skimage.io as io import numpy as np jzg = io.imread( 'jzg.jpg' ) # np.ndarray, [h, w, c], 值域(0, 255), RGB plt.imshow(jzg) #查看圖片 plt.show() lgz = io.imread( 'lgz.jpg' ) # np.ndarray, [h, w, c], 值域(0, 255), RGB plt.imshow(lgz) plt.show() print (jzg.shape) #查看圖片的大小 print (jzg.dtype) #查看數組元素數據類型 print (lgz.shape) print (lgz.dtype) pj1 = np.zeros(( 720 , 1280 + 1280 , 3 )) #橫向拼接 pj1[:,: 1280 ,:] = jzg.copy() #圖片jzg在左 pj1[:, 1280 :,:] = lgz.copy() #圖片lgz在右 print (pj1.dtype) #查看數組元素類型 pj1 = np.array(pj1,dtype = np.uint8) #將pj1數組元素數據類型的改為"uint8" plt.imshow(pj1) #查看拼接情況 plt.show() io.imsave( 'pj1.jpg' , pj1) #保存拼接后的圖片 |
縱向拼接
當然,可以橫向拼接自然也可以縱向拼接,只需將拼接用的數組改為如下:
1
|
pj2 = np.zeros(( 720 + 720 , 1280 , 3 )) #橫向拼接 |
將拼接操作改為:
1
2
|
pj1[: 720 ,:,:] = jzg.copy() #圖片jzg在上 pj1[ 720 :,:,:] = lgz.copy() #圖片lgz在下 |
然后其他步驟都一樣。
圖片間距
有些時候要求要有縫拼接,這時候就將拼接用的數組橫向或縱向變大,空白區域使用“0”或者“255”填充(我不知道“0”和“255”中,哪個代表白色,哪個代表黑色,需要的就自己去實驗或者查詢一下)。
到此這篇關于python多張圖片的無損拼接的實現示例的文章就介紹到這了,更多相關python圖片無損拼接內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/weixin_45816066/article/details/106073472