I'm working on MODIS NDVI composite data (single band). I converted the image to a numpy array and performed filtering operations. When i'm saving the new numpy array as an image I get a 3 band image instead of single band image. How can I save it as a single band image?
#read an image
img = cv2.imread("D:/trial/MOD09_NDVI.A2017001.tif")
cv2.namedWindow('Unfiltered Image', cv2.WINDOW_NORMAL)
cv2.imshow('Unfiltered Image',img)
cv2.waitKey(0)
#apply filter
myIMG = cv2.blur(img, (5,5))
cv2.namedWindow('Blur Image', cv2.WINDOW_NORMAL)
cv2.imshow('Blur Image', myIMG)
cv2.waitKey(0)
scipy.misc.imsave('D:/trial/blur_55.tif', myIMG)
------------
scipy.misc.imsave('D:/trial/blur_55.tif', myIMG)
saves a 3 band image instead of original single band image
-
I would recommend rasterio. Check this out: gis.stackexchange.com/a/129868/8104Aaron– Aaron ♦2018年04月10日 02:00:41 +00:00Commented Apr 10, 2018 at 2:00
2 Answers 2
Why are you using for saving Scipy? I think you can use function imwrite from CV2.
For example:
cv2.imwrite('D:/trial/blur_55.tif', myIMG)
or you can use also another libraries. For exammple PIL or Matplotlib.
Example for Matplotlib:
from matplotlib import pyplot as plt
plt.imshow(myIMG)
plt.show()
-
I was using imwrite as well but I needed to assign spatial references as well. I ended up using GDAL functions for it. Thank you for the replyMangesh Deshpande– Mangesh Deshpande2018年02月16日 09:54:47 +00:00Commented Feb 16, 2018 at 9:54
You can use the gdal
driver.Create(filename, xsize, ysize, [bands], [data_type], [options])
function.
For example:
from osgeo import gdal
driver = gdal.GetDriverByName('GTiff')
out_ds = driver.Create('raster.tif', array.shape[0], array.shape[1], 1)
out_band = out_ds.GetRasterBand(1)
out_band.WriteArray(array)
out_ds.FlushCache()
del out_ds, out_band
-
I ended up using something similar. Thanks for the replyMangesh Deshpande– Mangesh Deshpande2018年02月16日 09:53:17 +00:00Commented Feb 16, 2018 at 9:53