2020-05-17 02:48:35 -0600 | received badge | ● Popular Question (source) |
2014-11-25 03:23:55 -0600 | asked a question | write gdal image from opencv import using python Dear community, i'm new to gdal and opencv and I would like to run bilateral filter operation on a geotiff with up to 77 channels. So far i managed to work out a version handling a 1 layered image and performing the filter operation. Geoinformation is handed over by saving the image two times. first time opencv filter result is written to image that is opened again with gdal and saved with geoinformation from former source image. Is there away to directly hand over the image data to gdal without this two times export routine? How can I handle multiple layers? How can I make GDAL imports operational for opencv filter operations? Greetings confugere import cv2 import numpy as np from cv2 import waitKey from osgeo import gdal, osr read geotiffdef readFile(filename): filehandle = gdal.Open(filename) band1 = filehandle.GetRasterBand(1) geotransform = filehandle.GetGeoTransform() geoproj = filehandle.GetProjection() band1data = band1.ReadAsArray() xsize = filehandle.RasterXSize ysize = filehandle.RasterYSize return xsize,ysize,geotransform,geoproj,band1data write geotiffdef writeFile(filename,geotransform,geoprojection,data): xy = data.shape format = "GTiff" driver = gdal.GetDriverByName(format) dst_datatype = gdal.GDT_Byte dst_ds = driver.Create(filename,xy[1],xy[0],1,dst_datatype) dst_ds.GetRasterBand(1).WriteArray(data) dst_ds.SetGeoTransform(geotransform) dst_ds.SetProjection(geoprojection) return 1 def array_to_raster(array,x_pixels,y_pixels,xmin,ymax,psize,proje): """Array > Raster Save a raster from a C order array. ##test bilateral filterdatafile = gdal.Open("D:/satellitendaten/test.tif") img = cv2.imread("D:/satellitendaten/test.tif") bilateralResult = cv2.bilateralFilter(img,9,50,50) filter does not work with thisone:imgdal = cv2.imread("D:/satellitendaten/test.tif", cv2.IMREAD_ANYDEPTH) ##blurnum = np.asarray(blur)cv2.imshow("salida",blur)cv2.imwrite("D:/satellitendaten/out.tif",bilateralResult) ##read geoinformation from source and save it to new outputsource(xtest,ytest,transformtest,projtest,datatest) = readFile("D:/satellitendaten/test.tif") output(xblur,yblur,transformblur,projblur,bilateraldata) = readFile("D:/satellitendaten/out.tif") print ("Ergebnis test: ",xtest," ",ytest," ", transformtest, " ", projtest, " ") print ("Ergebnis blur: ",xblur," ",yblur," ", transformblur, " ", projblur, " ") print transformtest[3] writeFile("D:/satellitendaten/outgeo.tif",transformtest,projtest,bilateraldata) |
2014-11-25 03:09:03 -0600 | asked a question | write opencv with gdal in python Dear community I'd like to run bilateral filter operations on some Geotiffimages that can contain up to 70 layers. I'm new to opencv and gdal in python and so far managed to apply the bilateral filter on a test image with one layer and export it again as a geotiff. The export so far works by writing the image with opencv, open it with gdal again and write it again with gdal taking the geoinformation from the former input. I'd like to know how to handle multiple channels and to directly hand over the data imported with opencv to gdal and write it with the geoinformation gained from the source. Here is my code sofar: ''' Created on 24.11.2014 @author: Andreas ''' import cv2 import numpy as np from cv2 import waitKey from osgeo import gdal, osr read geotiffdef readFile(filename): filehandle = gdal.Open(filename) band1 = filehandle.GetRasterBand(1) geotransform = filehandle.GetGeoTransform() geoproj = filehandle.GetProjection() band1data = band1.ReadAsArray() xsize = filehandle.RasterXSize ysize = filehandle.RasterYSize return xsize,ysize,geotransform,geoproj,band1data write geotiffdef writeFile(filename,geotransform,geoprojection,data): xy = data.shape format = "GTiff" driver = gdal.GetDriverByName(format) dst_datatype = gdal.GDT_Byte dst_ds = driver.Create(filename,xy[1],xy[0],1,dst_datatype) dst_ds.GetRasterBand(1).WriteArray(data) dst_ds.SetGeoTransform(geotransform) dst_ds.SetProjection(geoprojection) return 1 def array_to_raster(array,x_pixels,y_pixels,xmin,ymax,psize,proje): """Array > Raster Save a raster from a C order array. ##test bilateral filterdatafile = gdal.Open("D:/satellitendaten/test.tif") img = cv2.imread("D:/satellitendaten/test.tif") bilateralResult = cv2.bilateralFilter(img,9,50,50) filter does not work with thisone:imgdal = cv2.imread("D:/satellitendaten/test.tif", cv2.IMREAD_ANYDEPTH) ##blurnum = np.asarray(blur)cv2.imshow("salida",blur)cv2.imwrite("D:/satellitendaten/out.tif",bilateralResult) ##read geoinformation from source and save it to new outputsource(xtest,ytest,transformtest,projtest,datatest) = readFile("D:/satellitendaten/test.tif") output(xblur,yblur,transformblur,projblur,bilateraldata) = readFile("D:/satellitendaten/out.tif") print ("Ergebnis test: ",xtest," ",ytest," ", transformtest, " ", projtest, " ") print ("Ergebnis blur: ",xblur," ",yblur," ", transformblur, " ", projblur, " ") print transformtest[3] writeFile("D:/satellitendaten/outgeo.tif",transformtest,projtest,bilateraldata) |