Ich möchte hyperspektrale Daten pro Pixel in ein Array laden und dieses Pixel wieder mit Python 3.5 schreiben. Ich möchte etwas mit der spektralen Information dieses Pixels berechnen.Wie lese ich read_pixel und schreibe in envi file; python3
Ich habe zwei verschiedene Möglichkeiten ausprobiert und beide funktionieren nicht so, wie ich es möchte.
Zuerst habe ich Spektralpaket aktualisiert, da die letzte Version angegeben wurde, nicht mit iterativ envi.save_image zu arbeiten, aber immer noch funktioniert mein Ansatz nicht. Zweitens meine Ansätze sind beide nicht sehr gut mit meinem Doppel For-Schleife - ich weiß - Wenn jemand könnte bitte helfen Sie mir auf mein Problem.
1. Platz:
myfile=open_image('input.hdr')
for i in range(0,myfile.shape[0]):
for j in range(0,myfile.shape[1]):
mypixel = (myfile.read_pixel(i,j))
envi.save_image('output.hdr', mypixel, dtype=np.int16)
erstes Beispiel gibt mir nicht das Bild speichern und nicht den Fehlercode
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.5/site-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 699, in runfile
execfile(filename, namespace)
File "/usr/local/lib/python3.5/site-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 88, in execfile
exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace)
File "/dtc/Python/Masking.py", line 132, in <module>
envi.save_image('test.hdr', mypixel, dtype=np.int16)#, metadata=myfile.metadata)
File "/usr/local/lib/python3.5/site-packages/spectral/io/envi.py", line 415, in save_image
data, metadata = _prepared_data_and_metadata(hdr_file, image, **kwargs)
File "/usr/local/lib/python3.5/site-packages/spectral/io/envi.py", line 568, in _prepared_data_and_metadata
add_image_info_to_metadata(image, metadata)
File "/usr/local/lib/python3.5/site-packages/spectral/io/envi.py", line 613, in add_image_info_to_metadata
metadata['samples'] = image.shape[1]
IndexError: tuple index out of range
2.:
myfile=open_image('input.hdr')
envi.create_image('test.hdr',ext='.bip', interleave='bip',dtype='h',force=True,metadata=myfile.metadata)
open('test.bip', 'w').close() # empties the created file
file = open('test.bip', 'ab')#ab #opens the created file for appending the new bands
for i in range(0,myfile.shape[0]):
for j in range(0,myfile.shape[1]):
mypixel = (myfile.read_pixel(i,j))
file.write(mypixel)
file.close()
myfile.close()
Das zweite Beispiel speichert das Bild, sondern speichern das Pixel in einer anderen Reihenfolge und vermasselt mein Bild.
Vielen Dank für Ihre Antwort. Ich habe das versucht und auch diesen Tipp von Kollegen bekommen. Das hat funktioniert und war am Ende schneller. Trotzdem gab ich mir nicht die Ergebnisse, die ich erwartet hatte. Die Ausgabe ist ein Bild mit nur Null Daten. – AnneR