兼容超大图片的处理_计算机读取超大图像的一些问题简述
近期在處理遙感數(shù)據(jù)的時(shí)候,發(fā)現(xiàn)了一些問題跟大家分享一下解決方案。
有一張不知道從哪里搞來的中國的夜間燈光數(shù)據(jù),分辨率為28800*18000,在Python語言下,Opencv讀取和PIL讀取都會(huì)出現(xiàn)問題。
Opencv直接就是變量為Nonetype,連錯(cuò)都沒報(bào)!
PIL是像素個(gè)數(shù)超過了限定值,報(bào)了錯(cuò),PIL拒絕加載。
So,我找到了一些解決方案:
1、編寫matlab程序,調(diào)用blockproc函數(shù),進(jìn)行切割,該方法適用于超大影像,如幾個(gè)G,甚至幾十GB的。
2、對(duì)于PIL、Opencv警告的處理也要具體問題具體分析:解壓后的數(shù)據(jù)小于當(dāng)前物理內(nèi)存的圖片,可以通過設(shè)置Image.MAX_IMAGE_PIXELS來適當(dāng)提高觸發(fā)警告的閾值,繼而強(qiáng)制加載。解壓后的數(shù)據(jù)大小可以用圖片尺寸與色彩位深來估計(jì)。
如PIL:
>>> from PIL import Image >>> Image.MAX_IMAGE_PIXELS = 1000000000 #Or None >>> im = Image.open(r'some.tif')但是,對(duì)于解壓后的數(shù)據(jù)顯然大于當(dāng)前物理內(nèi)存的圖片,應(yīng)當(dāng)靈活應(yīng)用圖片壓縮方法具備的特性,例如JPEG的遞進(jìn)性(即Progressive)、JPEG 2000的區(qū)域解碼(即Random Access)等等。然而這些特性,PIL幾乎不能使用,因此應(yīng)當(dāng)考慮其他專業(yè)軟件或者根據(jù)需求自行實(shí)現(xiàn)。
3、更換其他語言進(jìn)行嘗試,如C++,匯編語言。
4、萬事都不如增加配置來的方便,燒錢吧!如果是20gb以上的圖片,最好有128gb以上的內(nèi)存,和480gb以上固態(tài)硬盤,主要是讀寫速度不夠,所以硬盤一定要好。
也許對(duì)于具有極大物理內(nèi)存的用戶來說,通過調(diào)整閾值,圖像尺寸似乎就沒有了上限。但事實(shí)上考慮到Python令人遺憾的多核性能(至少對(duì)于cPython),以及一個(gè)平凡的觀察——你通常需要處理很多小圖片,或者些許大圖片——加載一個(gè)特別大的圖片將不會(huì)在合理的時(shí)間內(nèi)完成,即使通過并行處理也節(jié)約不了太多時(shí)間(并沒有那么多圖片需要處理)。
參考文獻(xiàn):
Matlab切割超大影像?blog.csdn.netPython圖形庫處理大型圖片的有關(guān)問題 - 胡先生與他愉快的朋友們?huzheyang.cn總結(jié)
以上是生活随笔為你收集整理的兼容超大图片的处理_计算机读取超大图像的一些问题简述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: bentley 二次开发_Bentley
 - 下一篇: matlab simulink_运用MA