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

Python 使用光栅保存窗口图像(作为jpg),python,numpy,opencv,rasterio,Python,Numpy,Opencv,Rasterio,我正在尝试使用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.

我正在尝试使用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
光栅时,您可以只读取一个波段,或者在保存时继续读取所有三个波段和所需波段,这样您就可以得到一个具有形状
(2000,2000)
(如果您想读取波段
i
,可能是
src[i]
)的数组

注意:根据numpy约定,此索引将从零开始,而不是从rasterio读取时的1(如下所示)