使用栅格保存窗口图像(作为 jpg)



我正在尝试使用Python Rasterio打开一个jpg(01.jpg并将窗口另存为jpg 我可以为 1 个波段执行此操作,而不是为 RGB 源图像的 3 个波段执行此操作。 问题在于乐队重新排列。 在我的代码和错误下面:

源形状 (2000, 2000, 3( 与给定索引 1 不一致

我试图修改行代码 src = np.moveaxis(src, [0, 1, 2], [2, 1, 0]( 但我仍然有错误.. 你能提供建议吗?

import cv2
import numpy as np
import rasterio
from rasterio.plot import show
w =2000
h = 2000
tile = np.ones((w,h))
cv2.imwrite('tile.jpg', tile)
with rasterio.open('01.JPG') as src:
src = src.read(window=Window(0, 0, w, h))
show(src)
with rasterio.open('tile.jpg', 'w', driver='GTiff',width=w, height=h, count=1,dtype=src.dtype) as tile:
src = np.moveaxis(src, [0, 1, 2], [2, 1, 0])
tile.write(src)

您正在尝试将 3 波段影像(从01.JPG读取(保存到 1 波段影像(使用count=1打开(。np.moveaxis只是移动轴位置,但您仍然有三个轴(因为错误消息告诉您形状(2000, 2000, 3)(。

如果要保存所有三个波段,但顺序已更改(可能是为了创建假彩色/伪彩色影像(,则需要将count=1更改为count=3

如果你只需要写一个乐队

有两种方法可以做到这一点:您可以在读取01.JPG栅格时仅读取一个波段,方法是将波段索引作为第一个参数传递给read()函数,或者继续读取所有三个波段并在保存时对所需波段进行索引,从而获得形状为(2000, 2000)的数组(如果要读取波段i,可能src[i](。

请注意,按照 numpy 约定,此索引将从零开始,而不是从 rasterio 读取时从 1 开始(遵循从 1 开始波段编号的 GDAL 约定(。

相关内容

  • 没有找到相关文章

最新更新