用Python接口从MATLAB编码器获取的matlabc文件
我正在尝试将一些MATLAB文件转换为Python。我使用MATLAB编码器生成C代码,然后在库中编译所有内容。我现在正在尝试为Python制作包装 如下所示:中的用Python接口从MATLAB编码器获取的matlabc文件,python,c,matlab,matlab-coder,ctype,Python,C,Matlab,Matlab Coder,Ctype,我正在尝试将一些MATLAB文件转换为Python。我使用MATLAB编码器生成C代码,然后在库中编译所有内容。我现在正在尝试为Python制作包装 如下所示:中的data_是一个图像,makePyramid函数的输出是一个长度level的结构,有3个字段img、gradX和gradY def TestEmxAPI(data_in): #class Opaque(ctypes.Structure): # pass sz = (data_in.shape)
data_是一个图像,makePyramid
函数的输出是一个长度level
的结构,有3个字段img
、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
如何使其工作?使用调试器识别导致问题的行。介绍了执行此操作的示例。您还可以使用像SWIG这样的包装生成器来生成包装。下面是一份展示如何将SWIG与MATLAB CoderTanks Ryan结合使用的报告,请发表评论。你发送的stakoverflow链接提出的解决方案给了我很大的启发。因此,我想使用matlab编码器已经生成的包装器。但我想我用错了。以防在此处找到包含所有详细信息的项目:使用调试器识别导致问题的行。介绍了执行此操作的示例。您还可以使用像SWIG这样的包装生成器来生成包装。下面是一份展示如何将SWIG与MATLAB CoderTanks Ryan结合使用的报告,请发表评论。你发送的stakoverflow链接提出的解决方案给了我很大的启发。因此,我想使用matlab编码器已经生成的包装器。但我想我用错了。以防在此处找到包含所有详细信息的项目: