spectral
spectral copied to clipboard
Enable data editing for SubImage
I have large .bsq images I cannot load into memory. Spectral
fails to apply the .open_memmap
method to the BsqFile
instance created from images (see this post).
Lacking other options, I wondered whether it would be possible to enable editing for single pixels, bands, or regions in order to assign values? Could a writable = True
option be added to .read_band()
, .read_bands()
, .read_pixel()
, and .read_subimage()
, or is this not possible?
What happens if you try this:
import logging
logging.getLogger('spectral').setLevel('DEBUG')
print(img.shape)
mm = img._open_memmap("r")
print(mm.shape)
The first lines give me the shape of the original image:
img.shape
prints (3805, 3940, 493)
But the second part fails:
img._open_memmap("r") is None
equals True
Accordingly, mm.shape
raises a Runtime error: 'NoneType' object has no attribute 'shape'
Edit:
The issue appears to be unique to older Python versions!
Ah, I didn't notice it was python 2.x. And if it was 32-bit python, then memmap
would not work on an image that large.
Out of curiosity, what does this print for your python version:
import sys
print(sys.version)
print(sys.maxsize)
>>>sys.version
'2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)]
and
>>> sys.maxsize
2147483647
Ok, so that looks like it is the problem. For your system & python version, it can only handle a max file size of 2 GB but yours is larger than that.