I'm pretty you would need to expose a buffer protocol as part of the oiio api
to avoid the copy.
https://docs.python.org/3/c-api/buffer.html
http://eli.thegreenplace.net/2011/11/28/less-copies-in-python-with-the-buffer-protocol-and-memoryviews
On 30 June 2015 07:28:09 BST, Larry Gritz <[email protected]> wrote:
>Ah, ok, I'll fix the type issue.
>
>
>On Jun 29, 2015, at 5:37 PM, Jonathan Gibbs <[email protected]>
>wrote:
>
>> I should have seen this sooner, but it appears that set_pixels in
>python is hard-coded to expect TypeDesc::TypeFloat, where as get_pixels
>lets me get the values using any type I specify. Do you think it's a
>good idea to be symmetric here?
>>
>> (py_imagebuf.cpp line 362)
>>
>> My particular use case is 16-bit int data. It's probably OK to
>promote to float given the processing I'm doing, but wasn't going to do
>that without a need.
>>
>> The current get_pixels/set_pixels interface return a python array
>(array.array), which I'm converting to a numpy.ndarray without trouble.
>I think I'm copying the data. There may be some way to get numpy and
>array to share memory, I'm still figuring that out. I imagine most will
>want them as numpy ndarrays, but it is nice to not have OIIO dependent
>on NumPy.
>>
>> (For the python-ites:
>>
>> numpyPixels = numpy.asarray(arrayPixels).reshape((spec.width,
>spec.height))
>>
>> and
>>
>> arrayPixels = array.array('H', numpyPixels.flatten())
>> )
>>
>> --jono
>>
>> PS: Either Google or Apply insist of changing "numpy" into "bumpy"
>every single time. Bumpy is a much better name for the library.
>>
>>
>> On Mon, Jun 15, 2015 at 2:54 PM Larry Gritz <[email protected]>
>wrote:
>> Jono, see this: https://github.com/OpenImageIO/oiio/pull/1167
>>
>> This adds a set_pixels (and in the Python binding, it takes either a
>tuple or a Python array). It's probably not super efficient (ick,
>there's an intermediate copy to a std::vector involved), but it's a
>start.
>>
>> I'm not experienced enough with numpy to know; how would you want the
>Python API to look to be most efficient for your purposes?
>>
>> -- lg
>>
>>
>> On Jun 4, 2015, at 4:24 PM, Jonathan Gibbs <[email protected]>
>wrote:
>>
>>> Does anyone have a good/simple example of working with OIIO in
>python. I can get at the raw pixels nicely enough with
>ImageBuf.get_pixels(), but it's not clear the best way to get those
>pixels back into an ImageBuf for writing. (There is no set_pixels.)
>>>
>>> As a side note, get_pixels returns a Python array, which I can
>convert easily enough to a numpy.ndarray. Is there a better way to get
>from a ImageBuf to a numpy.ndarray and back again in a reasonably
>efficient manner?
>>>
>>> --jono
>>
>>> _______________________________________________
>>> Oiio-dev mailing list
>>> [email protected]
>>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>
>>
>> --
>> Larry Gritz
>> [email protected]
>>
>>
>>
>> _______________________________________________
>> Oiio-dev mailing list
>> [email protected]
>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>> _______________________________________________
>> Oiio-dev mailing list
>> [email protected]
>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>
>--
>Larry Gritz
>[email protected]
>
>
>
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Oiio-dev mailing list
>[email protected]
>http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
--
Sent from my Android device with K-9 Mail. Please excuse my brevity._______________________________________________
Oiio-dev mailing list
[email protected]
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org