import  cv2
import  numpy as  np
from  osgeo import  gdal
kSize =  31   
g_sigma =  3.0   
g_theta =  np. pi /  4   
g_lambda =  10.0   
g_gamma =  0.5   
g_psi =  np. pi /  2   
kernel =  cv2. getGaborKernel( ( kSize,  kSize) ,  g_sigma,  g_theta,  g_lambda,  g_gamma,  g_psi,  ktype= cv2. CV_32F) 
dataset =  gdal. Open( "1.tif" ) 
image =  dataset. ReadAsArray( ) . transpose( ( 1 ,  2 ,  0 ) )   
num_bands =  image. shape[ 2 ] 
filtered_image =  np. zeros_like( image,  dtype= np. float32) 
for  band in  range ( num_bands) : band_image =  image[ : ,  : ,  band] filtered_band_image =  cv2. filter2D( band_image,  cv2. CV_32F,  kernel) filtered_image[ : ,  : ,  band]  =  filtered_band_image
filtered_image =  np. clip( filtered_image,  0 ,  255 ) . astype( np. uint8) 
driver =  gdal. GetDriverByName( 'GTiff' ) 
out_dataset =  driver. Create( 'gaofen2_image.tif' ,  dataset. RasterXSize,  dataset. RasterYSize,  num_bands,  gdal. GDT_Byte) 
out_dataset. SetProjection( dataset. GetProjection( ) ) 
out_dataset. SetGeoTransform( dataset. GetGeoTransform( ) ) 
for  band in  range ( num_bands) : out_band =  out_dataset. GetRasterBand( band +  1 ) out_band. WriteArray( filtered_image[ : ,  : ,  band] ) 
out_dataset. FlushCache( ) 
dataset =  None 
out_dataset =  None