开发者社区> 问答> 正文

rasterio.open()方法新生成的文件,怎么转成真实物理地址的tiff图片?

遇到一个问题,希望大佬能帮助解决,感激不尽[抱拳]
已有的资源是: 全球的geojson数据, 和一张全球国家地图
需求是要 实现某个地区的最大亮度和平均亮度,

我是通过 rasterio 先对全球地图进行了切割 以此得到一个局部地区.
with open('/Users/albert/PycharmProjects/py_test/jiangsu.geojson') as f:

data = json.load(f)

for i in range(0 , len(data['features'])):

features = [data['features'][i]['geometry']]

out_image, out_transform = rio.mask.mask(band, features, crop=True, nodata=band.nodata)
out_meta = band.meta.copy()
out_meta.update({"driver": "GTiff",

             "height": out_image.shape[1],
             "width": out_image.shape[2],
             "transform": out_transform})

band_mask = rio.open("newpic.tif", "w+", **out_meta)
band_mask.write(out_image)
举个栗子: 这是切出的江苏省地图
_2019_04_29_2_01_34

之后我想得到该图片每个像素的rbg值,
用以根据Luminance (standard for certain colour spaces): (0.2126R + 0.7152G + 0.0722*B) 计算亮度

但是这时候问题出现了, 用 rasterio.open()方法生成的图片 newpic.tif, 用Image.open()会报错--------------

img2 = Image.open('newpic.tif')

File "/Users/albert/PycharmProjects/py_test/venv/lib/python3.7/site-packages/PIL/Image.py", line 2705, in open

% (filename if filename else fp))

OSError: cannot identify image file 'newpic.tif'

我尝试使用Image.open()打开已有的全球地图(有真实物理地址),确实是没有问题的,

所以,我猜想 是不是 Image.open()方法必须是要打开具有真实物理地址的图片?
如果是, 那有什么方法能把那张图片转成真实图片吗?
如果不是, 那还有什么方法能绕过这个问题, 来实现这个需求吗?
我google了好久,,, 没找到合适的解决方案, 故此请求支援~

展开
收起
游客rkmbxfdfk6hm2 2019-04-29 14:03:53 4458 0
1 条回答
写回答
取消 提交回答
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载