pytho多張圖片的無損拼接的實(shí)現(xiàn)示例
導(dǎo)入 python 庫
import matplotlib.pyplot as plt import skimage.io as io import numpy as np
查看需要拼接的圖片
因?yàn)楣ぷ餍枰?,所以就不使用昨天晚上的圖片了。
我就拿了兩張截圖作為示例演示。
首先看看拼接前的圖片是什么樣子:
jzg = io.imread('jzg.jpg') # np.ndarray, [h, w, c], 值域[0, 255], RGB plt.imshow(jzg) #查看圖片 plt.show()
解釋說明:“jzg”保存的是numpy的數(shù)組。
lgz = io.imread('lgz.jpg') # np.ndarray, [h, w, c], 值域[0, 255], RGB plt.imshow(lgz) plt.show()
因?yàn)槲沂褂玫氖?jupyter Notebook,所以圖片顯示的不是太清晰。
查看一下圖片的大小和數(shù)組元素的數(shù)據(jù)類型。
print(jzg.shape) #查看圖片的大小 print(jzg.dtype) #查看數(shù)組元素?cái)?shù)據(jù)類型 print(lgz.shape) print(lgz.dtype)
輸出:
(720, 1280, 3)
uint8
(720, 1280, 3)
uint8
(720, 1280, 3)表示的是數(shù)組的大小,物理意義為[h, w, c],分別是圖片的高度h,圖片的寬度w,圖片的通道數(shù)c。
可以看出兩者的大小完全一致,數(shù)組元素的數(shù)據(jù)類型為“uint8”。
查看數(shù)組中元素的值域:
print([jzg.min(), jzg.max()])
輸出:
[0, 255]
橫向拼接
創(chuàng)建拼接用的數(shù)組:
pj1 = np.zeros((720,1280 + 1280,3)) #橫著拼接 pj1[:,:1280,:] = jzg.copy() #圖片jzg在左 pj1[:,1280:,:] = lgz.copy() #圖片lgz在右 print(pj1.dtype) #查看數(shù)組元素類型
輸出:
float64
可以看出拼接后的數(shù)據(jù)類型不一樣了,所以要改一下,不然顯示的就是錯(cuò)誤的。
pj1=np.array(pj1,dtype=np.uint8) #將pj1數(shù)組元素?cái)?shù)據(jù)類型的改為"uint8" plt.imshow(pj1) #查看拼接情況 plt.show()
保存拼接后的圖片
將拼接后的圖片保存在當(dāng)前目錄下,也可以改為其它的路徑。
io.imsave('pj1.jpg', pj1) #保存拼接后的圖片
總結(jié)
橫向拼接的代碼總結(jié)如下:
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) #查看數(shù)組元素?cái)?shù)據(jù)類型 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) #查看數(shù)組元素類型 pj1=np.array(pj1,dtype=np.uint8) #將pj1數(shù)組元素?cái)?shù)據(jù)類型的改為"uint8" plt.imshow(pj1) #查看拼接情況 plt.show() io.imsave('pj1.jpg', pj1) #保存拼接后的圖片
縱向拼接
當(dāng)然,可以橫向拼接自然也可以縱向拼接,只需將拼接用的數(shù)組改為如下:
pj2 = np.zeros((720 + 720,1280,3)) #橫向拼接
將拼接操作改為:
pj1[:720,:,:] = jzg.copy() #圖片jzg在上 pj1[720:,:,:] = lgz.copy() #圖片lgz在下
然后其他步驟都一樣。
圖片間距
有些時(shí)候要求要有縫拼接,這時(shí)候就將拼接用的數(shù)組橫向或縱向變大,空白區(qū)域使用“0”或者“255”填充(我不知道“0”和“255”中,哪個(gè)代表白色,哪個(gè)代表黑色,需要的就自己去實(shí)驗(yàn)或者查詢一下)。
到此這篇關(guān)于pytho多張圖片的無損拼接的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)pytho圖片無損拼接內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)數(shù)據(jù)庫表的監(jiān)控警告的項(xiàng)目實(shí)踐
本文主要介紹了使用Python 實(shí)現(xiàn)對數(shù)據(jù)庫表的監(jiān)控告警功能, 并將告警信息通過釘釘機(jī)器人發(fā)送到釘釘群,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05Python OpenCV視頻截取并保存實(shí)現(xiàn)代碼
這篇文章主要介紹了Python OpenCV視頻截取并保存實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Python多線程threading join和守護(hù)線程setDeamon原理詳解
這篇文章主要介紹了Python多線程threading join和守護(hù)線程setDeamon原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03PyQt5入門之基于QListWidget版本實(shí)現(xiàn)圖片縮略圖列表功能
這篇文章主要介紹了PyQt5入門之基于QListWidget版本實(shí)現(xiàn)圖片縮略圖列表功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09用smtplib和email封裝python發(fā)送郵件模塊類分享
本文針對發(fā)郵件相關(guān)的操作進(jìn)行了封裝,包括發(fā)送文本、HTML、帶附件的郵件,使用Python發(fā)郵件,主要用到smtplib和email兩個(gè)模塊,需要的朋友可以參考下2014-02-02