Интерфейсные файлы MATLAB C, полученные из MATLAB Coder с Python - PullRequest
1 голос
/ 02 ноября 2019

Я пытаюсь преобразовать некоторые из моих файлов MATLAB в Python. Я сгенерировал код на C, используя MATLAB Coder, затем скомпилировал все в библиотеке. Сейчас я пытаюсь сделать перенос для Python.

Это выглядит следующим образом: data_in - это изображение, а вывод makePyramid - это структура длины level с 3 полями * 1006. *, gradX и gradY.

def TestEmxAPI(data_in):

    #class Opaque(ctypes.Structure):
    #    pass

    sz = (data_in.shape)

    class Pyr(ctypes.Structure): 
        _fields_ = [('img', (ctypes.c_double*sz[0])*sz[1]),
                    ('gradX', (ctypes.c_double*sz[0])*sz[1]),
                    ('gradY', (ctypes.c_double*sz[0])*sz[1])] 

    nrows = ctypes.c_int(sz[0])
    ncols = ctypes.c_int(sz[1])
    level = 1
    blur = -1
    win = np.array([10.,10.,10.])
    winc = (ctypes.c_double *3)(*win)

    pp=Pyr()

    in_emx = EMX.emxCreateWrapper_real_T(ctypes.c_int(data_in.ctypes.data), 
                                         nrows, ncols) 

    EMX.emxCreateWrapper_struct0_T.argtypes = (ctypes.POINTER(Pyr), 
                                               ctypes.c_int,
                                               ctypes.c_int)
    EMX.emxCreateWrapper_struct0_T.restype = ctypes.POINTER(Pyr)
    ou_emx = EMX.emxCreateWrapper_struct0_T(pp,sz[0], sz[1])

    EMX.makePyramid_2D(in_emx, 
                       ctypes.c_double(level), 
                       ctypes.c_double(blur), 
                       winc, 
                       ou_emx)

    return pp

Теперь я получаю неприятную ошибку:

WindowsError: exception: access violation reading 0x0000000000000014

Как я могу заставить эту работу работать?

...