简体   繁体   中英

How to write PNG in rasterio from a stacked RGB?

I have 3 variables namely R, G, B. I want to make a PNG image based on the three using rasterio. I tried using np.dstack to stack the 3 images and use the result to write it.

Using rasterio, I tried to write it this way:

rgb = np.dstack((Nr,Ng,Nb))  
finame = "Image_RGB.png"
with rasterio.Env():
    with rasterio.open(finame, 'w',
        driver='PNG',
        height=rgb.shape[0],
        width=rgb.shape[1],
        count=1,
        dtype=rgb.dtype,
        nodata=0,
        compress='deflate') as dst:
        dst.write(rgb, 1)

But I get this error:

ValueError: Source shape (1, 830, 793, 3) is inconsistent 
with given indexes 1

Two things are going wrong here:

  1. Rasterio is channels first, while you have channels last. In other words, the shape of the rgb should be (3, 830, 793) not (830, 793, 3).
  2. You set count=1 and do dst.write(rgb, 1) . This makes it try to write the rgb as the first band of the output file. Instead you want count=3 and dst.write(rgb) .

This is a bit late for you, but maybe others will still be helped by my answer.

根据亚瑟的回答和原始代码,这是这个问题的一个解决方案,最后一行应该是:

        dst.write(np.rollaxis(rgb, 2,0))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM