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