Я пытался проверить мои фильтры на растре DEM для распознавания образов, и это всегда приводит к отсутствию последних строк и столбцов (например, 20) . Я пытался с библиотекой PIL, загрузка изображения. Тогда с NumPy. Выход такой же.
Я подумал, что что-то не так с моими циклами, при проверке значений в массиве (просто выбирая пиксели с помощью Identification в ArcCatalog) я понял, что значения пикселей не загружаются в массив.
Итак, просто открываем, помещаем в массив и сохраняем изображение из массива:
a=numpy.array(Image.open(inraster)) #raster is .tif Float32, size 561x253
newIm=Image.new(Im.mode, Im.size)
Image.fromarray(a).save(outraster)
Результатом является вырезание последних строк и столбцов. Извините, не могу опубликовать изображение
Кто-нибудь может помочь понять, почему? И посоветуете какое-нибудь решение?
РЕДАКТИРОВАТЬ:
Итак, мне удалось загрузить небольшие растры в массив с помощью парней, но при увеличении изображения я начинаю получать ошибки. Я предполагаю, что речь идет о пределах ограниченного массива, поэтому массив автоматически преобразуется или что-то в этом роде ... Итак, ex:
Traceback (most recent call last):
File "<pyshell#36>", line 1, in <module>
ima=numpy.array(inDs.GetRasterBand(1).ReadAsArray())
File "C:\Python25\lib\site-packages\osgeo\gdal.py", line 835, in ReadAsArray
buf_xsize, buf_ysize, buf_obj )
File "C:\Python25\lib\site-packages\osgeo\gdal_array.py", line 140, in BandReadAsArray
ar = numpy.reshape(ar, [buf_ysize,buf_xsize])
File "C:\Python25\lib\site-packages\numpy\core\fromnumeric.py", line 108, in reshape
return reshape(newshape, order=order)
ValueError: total size of new array must be unchanged
Дело в том, что я не хочу читать блок за блоком, так как мне нужна фильтрация, несколько раз с разными фильтрами, с разными размерами. Есть ли обходной путь или я должен научиться бродить по блокам: O
Вы можете использовать растерио для взаимодействия с массивами NumPy. Чтобы прочитать растр в массив:
Это будет читать все в трехмерный массив
arr
с размерами[band, row, col]
.Вот расширенный пример для чтения, редактирования пикселя и его сохранения в растре:
Растр будет записан и закрыт в конце оператора with .
источник
arr.transpose((1, 2, 0))
получить (высота, ширина, полосы) из каждого файла.np.append()
?Конечно, я читаю простое старое изображение png, но это работает с использованием scipy (
imsave
хотя использует PIL):Мой результирующий PNG также 81 х 90 пикселей.
источник
scipy
иnumpy
.Мое решение с использованием gdal выглядит следующим образом. Я думаю, что это очень многоразово.
источник
Я использую гиперспектральное изображение с 158 полосами. Я хочу рассчитать растр. но я получаю
для
print(data1)
я получил только некоторые "1", но реальные значения являются некоторые поплавкиПлз помогите найти ошибку
источник