1

I'm developing a python 2.7 module, that runs compiled function from a dynamic library using ctypes. It contains a class that wraps a C structure from that library, representing an image, and is used to receive data from the C code.

Dynamic library performs deep copy of data, specially for python wrapper.

Further processing in the module is done using numpy arrays, therefore, I should convert data, retrieved from the C code, to numpy.ndarray.

Speed and memory consumption is not an issue for now.

For now, I've implemented a method in that class, that creates and returns numpy.ndarray using numpy.frombuffer function.

I'm wondering, if it can be implemented better.

Here is the python class

import ctypes as ct
import numpy as np

class C_Mat(ct.Structure):
    _fields_ = [("rows", ct.c_int),
                ("cols", ct.c_int),
                ("data", ct.c_char_p),
                ("step", ct.ARRAY(ct.c_int64, 2)),
                ("data_type", ct.c_int)]

    _dtypes = { 0: np.uint8,
                1: np.int8,
                2: np.uint16,
                3: np.int16,
                4: np.int32,
                5: np.float32,
                6: np.float64 }


    def image(self):
        r = np.frombuffer(self.data,
                          dtype=self._dtypes[self.data_type], 
                          count=self.cols*self.step[1]*self.step[0])
        r.shape = (self.cols, self.rows)
        r.strides = (self.step[0], self.step[1])

        return r

1 Answer 1

1

There is the Array Interface description https://docs.scipy.org/doc/numpy/reference/arrays.interface.html

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.