图片批处理介绍:
由于在进行实验时,我们的图片没有resize到固定大小,或者想要将一个特别大的图片切分成若干个相同大小的自图片,常规做法是进来一张图,在算法预处理的环节就resize或者crop掉。这里,利用python+OpenCV进行了输入一个图片目录,然后对该目录下制定格式的图片按照指定大小进行裁剪输出;有的时候,我们接触到tif或者geotif图像,自己就带有地理坐标,如果只用OpenCV的话,可能会将地理坐标抹掉,造成信息的丢失,这里也借鉴了大神的部分工作《python中用GDAL实现矢量对栅格的切割》,利用GDAL的python版本可以实现和OpenCV一样的批量裁剪功能,但是保存的结果是带有地理坐标的tif影像。
OpenCV版本:
代码如下:
# -*- coding: utf-8 -*-
"""
Created on Thu Aug 24 13:30:31 2017
@author: AmosHawk WHU LIESMARS
"""
from __future__ import print_function
from __future__ import absolute_import
from __future__ import division
import sys
import os
#import threading
import cv2
#from PIL import Image
print (("shell name:"), sys.argv[0])
print ('params list:', str(sys.argv))
if (len(sys.argv)!=5):
print('the input params should be equal to 4, namely the content, the picture format(eg jpg),the susbsize image height, the subsize image width')
sys.exit(1)
for i in range(1, len(sys.argv)):
print ("param", i, sys.argv[i])
rootContent = sys.argv[1];
suffixFile = sys.argv[2];
heightsubImage = int(sys.argv[3]);
widthsubImage = int(sys.argv[4]);
def resize(dirFile,suffix):
#for rootpath, topdown, files in os.walk(dirFile):
for file in os.listdir(dirFile):
#singlefileName = os.path.join(rootpath,file)
singlefileName = dirFile+"\\"+file
singlefileForm = os.path.splitext(singlefileName)[1][1:]
if(singlefileForm == suffix):
print('loading................ : ',singlefileName)
# oriImage = Image.open(singlefileName)