| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- #!/usr/bin/env python
- # B a r a K u d a
- #
- # L. Brodeau, 2017]
- import sys
- import numpy as nmp
- from PIL import Image
- import string
- import os
- from netCDF4 import Dataset
- import datetime
- l_fake_coor = True
- #l_fake_coor = False
- narg = len(sys.argv)
- if not narg in [2, 3]:
- print 'Usage: '+sys.argv[0]+' <image> (<field divider for field>)'; sys.exit(0)
- cf_im = sys.argv[1]
- idiv = 1
- if narg == 3: idiv = int(sys.argv[2])
- print idiv
- cfname, cfext = os.path.splitext(cf_im)
- #(nj,ni) = nmp.shape(nav_lon)
- cf_nc = string.replace(os.path.basename(cf_im), cfext, '.nc')
- # Opening Images:
- print ' *** Opening image '+cf_nc
- pic = Image.open(cf_im)
- lcolor = False ; # if false it is a
- vshape_pic = nmp.shape(pic)
- if len(vshape_pic) == 3:
- (ny,nx,nrgb) = vshape_pic
- if nrgb != 3: print ' Problem #1 with your image, not what we expected!' ; sys.exit(0)
- lcolor = True ; # RGB color picture => 3 2D array
- print "\n It's a RGB color picture!\n"
-
- elif len(vshape_pic) == 2:
- lcolor = False ; # grey-scale picture (true black and white) => 1 2D array
- (ny,nx) = vshape_pic
- nrgb = 1
- print "\n It's a grey-scale B&W picture!\n"
- else:
- print ' Problem #2 with your image, not what we expected!' ; sys.exit(0)
- print " *** shape of pic: ", (ny,nx)
- xpic = nmp.array(pic)
- if l_fake_coor:
- # Prepare coordinates if needed:
- vlon = nmp.zeros(nx) ; dx = 360./float(nx)
- for ji in range(nx): vlon[ji] = (float(ji) + 0.5)*dx
-
- vlat = nmp.zeros(ny) ; dy = 180./float(ny)
- for jj in range(ny): vlat[jj] = -90 + (float(jj) + 0.5)*dy
- #print vlat[:]
- #sys.exit(0)
- f_out = Dataset(cf_nc, 'w', format='NETCDF4')
- # Dimensions:
- cdim_x = 'x'
- cdim_y = 'y'
- #if l_fake_coor:
- # cdim_x = 'lon'
- # cdim_y = 'lat'
- f_out.createDimension(cdim_x, nx)
- f_out.createDimension(cdim_y, ny)
- if l_fake_coor:
- id_lon = f_out.createVariable('lon0','f4',(cdim_x,))
- id_lat = f_out.createVariable('lat0','f4',(cdim_y,))
- id_lon[:] = vlon[:]
- id_lat[:] = vlat[:]
- if lcolor:
-
- id_red = f_out.createVariable('red','f4',(cdim_y,cdim_x,))
- id_red.long_name = 'Red (of RGB)'
- id_green = f_out.createVariable('green','f4',(cdim_y,cdim_x,))
- id_green.long_name = 'Green (of RGB)'
- id_blue = f_out.createVariable('blue','f4',(cdim_y,cdim_x,))
- id_blue.long_name = 'Blue (of RGB)'
- id_red[:,:] = nmp.flipud(xpic[:,:,0])
- id_green[:,:] = nmp.flipud(xpic[:,:,1])
- id_blue[:,:] = nmp.flipud(xpic[:,:,2])
- else:
- id_bw = f_out.createVariable('bw','f4',(cdim_y,cdim_x,))
- id_bw.long_name = 'Grey scale'
- id_bw[:,:] = nmp.flipud(xpic[:,:]) / idiv
- f_out.About = 'Image '+cf_im+' converted to netcdf.'
- f_out.Author = 'Generated with image_to_netcdf.py of BARAKUDA (https://github.com/brodeau/barakuda)'
- f_out.close()
- print cf_nc+' created!!!'
|