以下の内容はhttps://seinzumtode.hatenadiary.jp/entry/2024/05/17/123619より取得しました。


PyQGISでNDVI

from osgeo import _gdal as gdal
from osgeo import osr
import numpy as np
import rasterio
import cv2
import tempfile

### READ FROM RASTER
layer = iface.layerTreeView().selectedLayers()[0]
rasterPath = layer.source()
ext = layer.extent()
width = layer.width()
height= layer.height()
xmin = ext.xMinimum()
xmax = ext.xMaximum()
ymin = ext.yMinimum()
ymax = ext.yMaximum()
crs_string = layer.crs().authid()
geot = [xmin,(xmax-xmin)/float(width), 0, ymax, 0, (ymin-ymax)/float(height)]

ds_read = gdal.Open(rasterPath)
B = np.array(ds_read.GetRasterBand(1).ReadAsArray())
G = np.array(ds_read.GetRasterBand(2).ReadAsArray())
R = np.array(ds_read.GetRasterBand(3).ReadAsArray())
NIR = np.array(ds_read.GetRasterBand(4).ReadAsArray())


### COMPUTER VISION MANIPULATION
NDVI = (NIR-R)/(NIR+R) * 255/2.0
#NDVI = (NIR-R)/(NIR+R)*255/1.0 #almost the same as above result

### WRITE TO RASTER

OUTPUT_LAYER_NAME = "NDVI"
filename = OUTPUT_LAYER_NAME+".tif"
filepath = os.path.join(tempfile.mkdtemp(), filename)
tmpfile_read = open(filepath, "w")
tmpfile_read.close()
fn = filepath

driver = gdal.GetDriverByName('GTiff')
ds_write = driver.Create(fn, xsize=width, ysize=height, bands=1)
ds_write.GetRasterBand(1).WriteArray(NDVI)
#ds_write.GetRasterBand(2).WriteArray(band2)
#ds_write.GetRasterBand(3).WriteArray(band3)

ds_write.SetGeoTransform(geot)
srs = osr.SpatialReference()
srs.SetFromUserInput(crs_string)
ds_write.SetProjection(srs.ExportToWkt())
ds_write = None

rlayer = iface.addRasterLayer(fn, OUTPUT_LAYER_NAME)

RGB

NDVI (Raster calculator)

NDVI (PyQGIS)

ほとんど結果は変わらないので動いている




以上の内容はhttps://seinzumtode.hatenadiary.jp/entry/2024/05/17/123619より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14