2017-10-08 98 views
1

有許多方法可以使用OpenCV或PIL將img旋轉90度,如何通過自設計代碼來執行此操作,而無需使用任何庫? 我嘗試過旋轉矩陣,但RGB元素使它失敗python將圖像旋轉90度而不使用任何libs

+0

如何在不使用任何庫的情況下讀取或寫入圖像文件?除非您使用簡單的文件格式(如NetPBM系列),否則無圖像的讀寫圖像文件非常繁瑣且容易混淆。 –

+0

讀寫可以使用lib函數,但旋轉過程不能 –

回答

0

可以通過調換和反射的組合旋轉90°的像素的網格編碼的好方法。您可以使用zip進行轉置,然後使用reversed進行反射,從而以純Python的方式執行此操作。

下面是一個簡短的演示,它可以做90°順時針旋轉。

# Some fake pixels 
data = [ 
    [(100, 101, 102), (105, 106, 107), (110, 111, 112), (115, 116, 117)], 
    [(120, 121, 122), (125, 126, 127), (130, 131, 132), (135, 136, 137)], 
    [(140, 141, 142), (145, 146, 147), (150, 151, 152), (155, 156, 157)], 
    [(160, 161, 162), (165, 166, 167), (170, 171, 172), (175, 176, 177)], 
    [(180, 181, 182), (185, 186, 187), (190, 191, 192), (195, 196, 197)], 
] 

new = [list(reversed(t)) for t in zip(*data)] 
for row in new: 
    print(row) 

輸出

[(180, 181, 182), (160, 161, 162), (140, 141, 142), (120, 121, 122), (100, 101, 102)] 
[(185, 186, 187), (165, 166, 167), (145, 146, 147), (125, 126, 127), (105, 106, 107)] 
[(190, 191, 192), (170, 171, 172), (150, 151, 152), (130, 131, 132), (110, 111, 112)] 
[(195, 196, 197), (175, 176, 177), (155, 156, 157), (135, 136, 137), (115, 116, 117)] 

但嚴重的是,它的速度更快(更簡單)做這樣的事情有一個圖書館,除非圖像是非常小的。如果你不想使用PIL,你可以用Numpy做。