注意使用extern "C" 按照C文件编译方式防止方法名被混淆,接着将.cpp文件编译成动态链接库。
二、参数传递
1、Mat传递
a、Python代码
mat = np.zeros(dtype=np.uint8,shape=(imgHeight,imgWidth,3)) //初始一个Mat
so.GetImageMat(mat.ctypes.data_as(C.POINTER(C.c_ubyte))); //将Mat的数据转为ubyte指针传入C++
b、C++代码
void GetImageMat(uchar* data)
{
Mat mat(cameraImg.height, cameraImg.width, CV_8UC3, cameraImg.rawData.data(), cameraImg.width*3);
cvtColor(mat, mat, COLOR_RGB2BGR);
int dataLen = imgHeight * imgWidth * 3 * sizeof(unsigned char);
memcpy(data, mat.data, dataLen); //更改data的值,达到python数据和C++数据传递的效果
}
2、string传递
python中utf-8存中文是用3个字节存一个,而英文是1个字节,使用c_wchar_p方法转出的字符串每个字符后面都有'\0',所以在C++中要做一定转换。
a、Python代码
data='connect to xxxx'
p=c_wchar_p(data)
so.SendDataToMSDK_PY(p,len(data));
b、C++代码