spectral icon indicating copy to clipboard operation
spectral copied to clipboard

Enable data editing for SubImage

Open ManuelPopp opened this issue 2 years ago • 6 comments

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?

ManuelPopp avatar Jan 03 '23 21:01 ManuelPopp

What happens if you try this:

import logging
logging.getLogger('spectral').setLevel('DEBUG')
print(img.shape)
mm = img._open_memmap("r")
print(mm.shape)

tboggs avatar Jan 03 '23 22:01 tboggs

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!

ManuelPopp avatar Jan 03 '23 22:01 ManuelPopp

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.

tboggs avatar Jan 03 '23 23:01 tboggs

Out of curiosity, what does this print for your python version:

import sys
print(sys.version)
print(sys.maxsize)

tboggs avatar Jan 04 '23 14:01 tboggs

>>>sys.version '2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] and >>> sys.maxsize 2147483647

ManuelPopp avatar Jan 04 '23 20:01 ManuelPopp

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.

tboggs avatar Jan 04 '23 22:01 tboggs