Python 2.7 - CV2, Rasterio получает ошибку numpy.ndarray object is not callable

Я пытаюсь замаскировать изображение формой из геоджсона.

Первое, что я делаю, это получаю пиксели, которые представляют мои координаты широты и долготы на изображении.

Когда у меня есть эта информация, я строю «Многоугольник» с этими координатами, а затем пытаюсь обрезать изображение, но получаю эту ошибку:

Объект numpy.ndarray не вызывается

Обратите внимание, что абсолютный путь относится к файлу .jp2.

geoms = [{'type':'Polygon', 'coordinates': [[(x1,y1),(x2,y2),(x3,y3),(x4,y4)]]}]

with rasterio.open(absolutePath) as src:
    out_image,out_transform = mask(src,geoms,crop=True)
out_meta = src.meta.copy()

Я также пробовал использовать первую координату как 5-ю, чтобы «запечатать» многоугольник, но ничего не изменилось.

Единственное сообщение об ошибке, которое я получил, это:

TypeErrorTraceback (most recent call last)
<ipython-input-13-796462428f9b> in <module>()
      2 
      3 with rasterio.open(absolutePath) as src:
----> 4     out_image,out_transform = mask(src,geoms,crop=True)
      5 out_meta = src.meta.copy()

TypeError: 'numpy.ndarray' object is not callable

Вот весь мой код:

from snappy import ProductIO
from snappy import PixelPos, GeoPos
import numpy as np
import geojson
import cv2
import os
import rasterio
from rasterio.mask import mask

path = '/home/.../x.SAFE'
product = ProductIO.readProduct(path)
sg = product.getSceneGeoCoding()

pathGeoJson = '/home/.../x.geojson'
with open(pathGeoJson) as f:
    gj = geojson.load(f)
features = gj['features'][0]
latlon1 = features.geometry.coordinates[0][0]
latlon2 = features.geometry.coordinates[0][1]
latlon3 = features.geometry.coordinates[0][2]
latlon4 = features.geometry.coordinates[0][3]

geoms = gj['features'][0].geometry
geoms

def LatLon_from_XY(ProductSceneGeoCoding, x, y):
    geoPos = ProductSceneGeoCoding.getGeoPos(PixelPos(x,y),None)
    lat = geoPos.getLat()
    lon = geoPos.getLon()
    return lat,lon

def XY_from_LatLon(ProductSceneGeoCoding, latitude, longitude):
    pixelPos = ProductSceneGeoCoding.getPixelPos(GeoPos(latitude, longitude),None)
    x = np.round(pixelPos.getX())
    y = np.round(pixelPos.getY())
    return x,y

x1,y1 = XY_from_LatLon(sg,latlon1[0], latlon1[1])
x2,y2 = XY_from_LatLon(sg,latlon2[0], latlon2[1])
x3,y3 = XY_from_LatLon(sg,latlon3[0], latlon3[1])
x4,y4 = XY_from_LatLon(sg,latlon4[0], latlon4[1])

print(x1,y1)
print(x2,y2)
print(x3,y3)
print(x4,y4)

pathToJP2 = '/home/.../IMG_DATA/'
arr = os.listdir(pathToJP2)

absolutePath = pathToJP2+arr[1]
arr[1]
print(absolutePath)

geoms = [{'type':'Polygon', 'coordinates': [[(x1,y1),(x2,y2),(x3,y3),(x4,y4)]]}]

with rasterio.open(absolutePath) as src:
    out_image,out_transform = mask(src,geoms,crop=True)
out_meta = src.meta.copy()

person WikiOverflow    schedule 20.09.2018    source источник
comment
Вы не показали, что такое mask   -  person roganjosh    schedule 20.09.2018
comment
Может, я звучу как идиот, о какой маске вы говорите? Я использую это: rasterio.readthedocs.io/en/latest/ api/rasterio.mask.html если это ответит на ваш вопрос :)   -  person WikiOverflow    schedule 20.09.2018
comment
mask(src,geoms,crop=True). Предположительно, это то, что вызывает ошибку, но вы нигде не определили mask в этом коде.   -  person roganjosh    schedule 20.09.2018
comment
Да, это функция от rasterio   -  person WikiOverflow    schedule 20.09.2018
comment
Хорошо, пожалуйста, покажите полную трассировку как редактирование, чтобы мы знали, что именно вызывает ошибку.   -  person roganjosh    schedule 20.09.2018
comment
То, что я только что отредактировал, это все, что у меня есть :S   -  person WikiOverflow    schedule 20.09.2018
comment
Собираюсь выйти на конечность. Перезапустите ядро ​​iPython, возможно, используя ctrl + ., но это зависит от того, как вы используете IPython.   -  person roganjosh    schedule 20.09.2018


Ответы (1)


вы можете использовать opencv для обрезки и даже для применения маски, и лучше ответить здесь

person shubh diwase    schedule 20.09.2018
comment
Кажется, так похоже на то, что я ищу, попробую это. Спасибо:) - person WikiOverflow; 20.09.2018