利用Python和GDAL實現圖像批處理
GDAL是一個開放源代碼的柵格空間數據處理包,功能很強大。要使用它所提供的功能可以安裝FWTools 軟件包(http://fwtools.maptools.org/),這樣我們就可以使用其提供的命令行功能和python編程接口。
在本文中,我們沒有用到python接口,而僅僅用到GDAL一個簡單的命令行功能gdal_translate,就可以實現很靈活的功能。
先介紹一下 gdal_translate,顧名思義,這是一個圖像格式轉換的命令,但在轉換過程中,我們可以做很多事情的,比如從原始圖像中裁出一個窗口,改變圖像 的地理范圍,改變投影等,詳細信息在FWTools的命令行中,敲下gdal_translate,然后回車,就會出現提示信息。舉個簡單的例子,我要把 pic.tif 做成JPG的縮略圖,可以用如下命令: gdal_translate -of "JPEG" -outsize 5% 5% pic.tif overview.jpg 回車,就OK了;
再比如:我要從圖像中裁剪出一塊(要先知道圖像信息,gdalinfo pic.tif),命令如下: gdal_translate -of "JPEG" -srcwin 100 100 200 200 pic.tif clip.jpg
還是比較簡單的,其他功能可以參考一下http://www.gdal.org/gdal_translate.html ,也不太難。
當處理一張圖片的時候,我們可以直接敲命令,但如果有10000張圖片擺在你面前,相信你不願意做一萬次吧,呵呵~~~ 這時就需要批處理了,把所有要處理的圖像放到一個文件夾中,利用Python簡單地做個遍歷,一一處理即可。
先說一下python腳本的運行方式,打開安裝FwTools命令行,敲:python myscript.py(腳本名) parameters(參數) ,即可運行。
代碼如下,很簡單的說~~
#名稱:圖像裁剪批處理 #時間:2006年1月4日 #作者:liujunzhi #內容:利用GDAL命令實現同一文件夾中,相同坐標系和大小的圖像的裁減或其他批處理
import glob import sys import os
strDir = sys.argv[1] str = strDir + "\*.img" #you can change the extension name according to your needs fileList = glob.glob(str)
for name in fileList: print name, '\n' name_without_suffix = name[:-4] strCmd = "gdal_translate -srcwin 6101 4801 1024 1024 " + name + ' ' + name_without_suffix + '_xuzhou.img' os.system(strCmd) print strCmd
根據需要把strCmd改成需要的別的命令,就可以做別的工作了,比如我想通過重采樣將一些圖像根據地理坐標挖出一個窗口,轉換到一定的分辨率,並對其地理范圍進行賦值,就可以將上面腳本中的strCmd一句改為:
strCmd = "gdal_translate -outsize 1024 1024 -projwin 505333.5 3805006.5 534517.5 3775822.5 -a_ullr 505333.5 3805006.5 534517.5 3775822.5 " + name + ' ' + name_without_suffix + '_xuzhou.tif'
在本文中,我們沒有用到python接口,而僅僅用到GDAL一個簡單的命令行功能gdal_translate,就可以實現很靈活的功能。
先介紹一下 gdal_translate,顧名思義,這是一個圖像格式轉換的命令,但在轉換過程中,我們可以做很多事情的,比如從原始圖像中裁出一個窗口,改變圖像 的地理范圍,改變投影等,詳細信息在FWTools的命令行中,敲下gdal_translate,然后回車,就會出現提示信息。舉個簡單的例子,我要把 pic.tif 做成JPG的縮略圖,可以用如下命令: gdal_translate -of "JPEG" -outsize 5% 5% pic.tif overview.jpg 回車,就OK了;
再比如:我要從圖像中裁剪出一塊(要先知道圖像信息,gdalinfo pic.tif),命令如下: gdal_translate -of "JPEG" -srcwin 100 100 200 200 pic.tif clip.jpg
還是比較簡單的,其他功能可以參考一下http://www.gdal.org/gdal_translate.html ,也不太難。
當處理一張圖片的時候,我們可以直接敲命令,但如果有10000張圖片擺在你面前,相信你不願意做一萬次吧,呵呵~~~ 這時就需要批處理了,把所有要處理的圖像放到一個文件夾中,利用Python簡單地做個遍歷,一一處理即可。
先說一下python腳本的運行方式,打開安裝FwTools命令行,敲:python myscript.py(腳本名) parameters(參數) ,即可運行。
代碼如下,很簡單的說~~
#名稱:圖像裁剪批處理 #時間:2006年1月4日 #作者:liujunzhi #內容:利用GDAL命令實現同一文件夾中,相同坐標系和大小的圖像的裁減或其他批處理
import glob import sys import os
strDir = sys.argv[1] str = strDir + "\*.img" #you can change the extension name according to your needs fileList = glob.glob(str)
for name in fileList: print name, '\n' name_without_suffix = name[:-4] strCmd = "gdal_translate -srcwin 6101 4801 1024 1024 " + name + ' ' + name_without_suffix + '_xuzhou.img' os.system(strCmd) print strCmd
根據需要把strCmd改成需要的別的命令,就可以做別的工作了,比如我想通過重采樣將一些圖像根據地理坐標挖出一個窗口,轉換到一定的分辨率,並對其地理范圍進行賦值,就可以將上面腳本中的strCmd一句改為:
strCmd = "gdal_translate -outsize 1024 1024 -projwin 505333.5 3805006.5 534517.5 3775822.5 -a_ullr 505333.5 3805006.5 534517.5 3775822.5 " + name + ' ' + name_without_suffix + '_xuzhou.tif'