GDAL Openは成功するが、AttributeError: 'NoneType' object が発生する
解決したいこと
-
AttributeError: 'NoneType' object has no attribute 'RasterCount'
を解決したい。 -
AttributeError: 'NoneType' object has no attribute 'RasterCount'
の理由を知りたい
JupyterNotebookにてPythonスクリプトで以下を実行しています。gdal.Open()は成功していますが、読み込まれた画像に対しての処理を実施する際に、AttributeError: 'NoneType' object has no attribute XXXX
が発生しています。
いろいろと試行錯誤してみましたが解説せず、解決策を探しています。。。
発生している問題・エラー
AttributeError Traceback (most recent call last)
Cell In[29], line 24
22 # IMG_1読込
23 ds_1 = gdal.Open(IMG_PATH_1_CUT, gdal.GA_ReadOnly)
---> 24 image_1 = np.array([ds_1.GetRasterBand(i + 1).ReadAsArray() for i in range(ds_1.RasterCount)])
25 del ds_1 #不要メモリ解放
27 # IMG_2読込
AttributeError: 'NoneType' object has no attribute 'RasterCount'
該当するソースコード
from osgeo import gdal
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
def cut4_geotiff(IMG_IN, IMG_OUT, minX, maxX, minY, maxY):
gdal.Translate(IMG_OUT, IMG_IN, projWin=[minX,maxY,maxX,minY])
return print("Extraction process was completed! : ", IMG_IN)
# ダウンロードしたファイルを指定して、切り出した上で、赤青合成を行い、PNGで表示
if __name__ == '__main__':
# 処理対象ファイルの指定
IMG_PATH_1 = "AS200355208498-180908_webcog.tif"
IMG_PATH_2 = "AS201462808498-200905_webcog.tif"
# AOI抽出後(切り出し後)のGeotiffの保存先の指定
IMG_PATH_1_CUT = "AS200355208498-180908_webcog_cut.tif"
IMG_PATH_2_CUT = "AS201462808498-200905_webcog_cut.tif"
IMG_JPG = "out.jpeg"
# AOI(切り出し部分)の四隅緯度経度指定
minX = 141.93507323883878
minY = 42.75282111399301
maxX = 141.94639048725506
maxY = 42.75848804932892
# AOIの抽出処理(四隅): 切り出し処理
cut4_geotiff(IMG_PATH_1, IMG_PATH_1_CUT, minX, maxX, minY, maxY)
cut4_geotiff(IMG_PATH_2, IMG_PATH_2_CUT, minX, maxX, minY, maxY)
# IMG_1読込
ds_1 = gdal.Open(IMG_PATH_1_CUT, gdal.GA_ReadOnly)
image_1 = np.array([ds_1.GetRasterBand(i + 1).ReadAsArray() for i in range(ds_1.RasterCount)])
del ds_1 #不要メモリ解放
# IMG_2読込
ds_2 = gdal.Open(IMG_PATH_2_CUT, gdal.GA_ReadOnly)
image_2 = np.array([ds_2.GetRasterBand(i + 1).ReadAsArray() for i in range(ds_2.RasterCount)])
del ds_2 #不要メモリ解放
# 画像間のピクセル数を揃える処理(今回は必要なし)
x_min = min([image_1.shape[1], image_2.shape[1]])
y_min = min([image_1.shape[2], image_2.shape[2]])
# print("MinX : ", image_1.shape[1], image_2.shape[1])
# print("MinY : ", image_1.shape[2], image_2.shape[2])
# 出力用配列の準備
image = np.zeros((x_min,y_min,3)).astype(np.uint8)
image[:,:,0] = image_2[0, :x_min, :y_min]
image[:,:,1] = image_1[0, :x_min, :y_min]
image[:,:,2] = image_1[0, :x_min, :y_min]
# print(image_1.shape, image_2.shape, image.shape)
# 不要メモリの解放
del image_1
del image_2
# 出力画像の保存
pil_img = Image.fromarray(image)
# print(pil_img.mode)
pil_img.save(IMG_JPG)
print("DONE!")
自分で試したこと
その他
cut4_geotiff
関数は成功している(エラーなし)のように思えますが、切り出された画像ファイルはNotebookのフォルダでは確認できませんでした。
こちらに記載されている内容を模倣しています。
https://sorabatake.jp/25931/
0