Yeah, that looks like it should work. If you really needed it done with ImageBuf specifically for some reason, I think it might look like
# read old images src_img = ImageBuf(src_image_file) dst_img = ImageBuf(dst_image_file) # make spec to describe the new image and allocate it spec = src_img.spec.copy() spec.nchannels = spec.nchannels + 1 spec.channel_names.append("new_layer.new_channel") new_img = ImageBuf(spec) # copy the right parts to the right places # ... the first three channels get pasted from dst ImageBufAlgo.paste(new_img, 0, 0, 0, 0, dst_img) # ... the last channel gets pasted from src.G roi = src.roi.copy() roi.chbegin = 1 roi.chend = 2 ImageBufAlgo.paste(new_img, 0, 0, 0, spec.nchannels - 1, src_img, roi) # write results new_img.write(dest_image_file) (I haven't tried this, it's off the top of my head, but it's probably close to correct.) I don't necessarily think this is any better or more efficient than what you did, I just thought it might be helpful to compare how it would be done with ImageBuf alone, no ImageInput/ImageOutput. -- lg > On Aug 15, 2022, at 9:14 AM, Hugh Macdonald <hugh.macdon...@scanlinevfx.com> > wrote: > > Hi Larry, > > (b) is the closest to what I'm trying to do. > > Since sending my initial email, I'm now doing this. This keeps RGB in > dest_img, and copies G from src_img into new_layer.new_channel > > src_img = oiio.ImageInput.open(src_image_file) > dest_img = oiio.ImageInput.open(dest_image_file) > > src_data = src_img.read_image() > dest_data = dest_img.read_image() > > src_spec = src_img.spec() > dest_spec = dest_img.spec() > > src_img.close() > dest_img.close() > > width = dest_spec.width > height = dest_spec.height > > new_channels = list(dest_spec.channelnames) > new_channels.append("new_layer.new_channel") > copy_channel_indices = [1] > > out_data = np.concatenate((dest_data, src_data[:, :, copy_channel_indices]), > axis=2) > > out_img = oiio.ImageOutput.create(dest_image_file) > out_spec = oiio.ImageSpec(width, height, len(new_channels), "float32") > out_spec.channelnames = tuple(new_channels) > out_img.open(dest_image_file, out_spec) > > out_img.write_image(out_data) > out_img.close() > > Thanks > Hugh > > On 14/08/2022 23:02, Larry Gritz wrote: >> Hi, Hugh. Can you clarify whether you want to >> >> (a) make a new RGB image R from B but G and B from A? >> (b) make a new image with an additional channel, yielding {R, G, B, and >> New}, where R,G,B came from A and New is the R channel from B? >> >> ? >> >> >>> On Aug 8, 2022, at 8:14 AM, Hugh Macdonald <hugh.macdon...@scanlinevfx.com >>> <mailto:hugh.macdon...@scanlinevfx.com>> wrote: >>> >>> Hey all, >>> >>> >>> I'm not overly familiar with the OIIO python API, so apologies if this is >>> quite a simple question! I can't find any information online on how to do >>> this with the Python API... >>> >>> I've got 2 EXRs, both with RGB channels, and I'd like to take the R channel >>> from one of them and put it into another channel in the other. >>> >>> I've been looking at doing a 2-step process. The first step being to rename >>> the channels in one ImageBuf, and to remove the unneeded channels, and the >>> second being to use ImageBufAlgo.channel_append() to combine the two images >>> together. >>> >>> >>> This feels like it is unnecessarily 2 steps. Could someone point me at some >>> examples for how to do this in a single step? >>> >>> >>> I'm sure that this is pretty simple, but all the examples that I can find >>> are for how to do this kind of thing using oiiotool, rather than doing it >>> directly using the API. >>> >>> >>> Thanks >>> >>> -- >>> Hugh >>> >>> _______________________________________________ >>> Oiio-dev mailing list >>> Oiio-dev@lists.openimageio.org <mailto:Oiio-dev@lists.openimageio.org> >>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org >>> <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org> >>> >> >> -- >> Larry Gritz >> l...@larrygritz.com <mailto:l...@larrygritz.com> >> >> >> >> >> >> >> >> _______________________________________________ >> Oiio-dev mailing list >> Oiio-dev@lists.openimageio.org <mailto:Oiio-dev@lists.openimageio.org> >> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org >> <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org> > > -- > Hugh Macdonald > Product Owner, Volumetric Capture > Eyeline Studios > Ext: 4165 > www.scanlinevfx.com > <http://www.scanlinevfx.com/>_______________________________________________ > Oiio-dev mailing list > Oiio-dev@lists.openimageio.org > http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org -- Larry Gritz l...@larrygritz.com
_______________________________________________ Oiio-dev mailing list Oiio-dev@lists.openimageio.org http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org