我需要将C函数的Mat结果返回给Python并将其转换为numpy.array。在我打电话之前,我不知道结果Mat的大小,因此我无法将指针传递给现有数组。这是我的代码:
的Python:
def Utils_FindFeatures(image):
comDll.FindFeatures.argtypes = [ndpointer(c_uint8, flags="C_CONTIGUOUS"), c_size_t, c_size_t, c_size_t, ndpointer(c_uint8, flags="C_CONTIGUOUS")]
comDll.FindFeatures.restype = None
descriptors = ???
comDll.FindFeatures(image.astype(c_uint8), image.shape[0], image.shape[1], 0, descriptors)
C ++
uchar* MatToBytes(Mat image, int& image_size)
{
image_size = image.total() * image.elemSize();
uchar * image_uchar = new uchar[image_size];
//image_uchar is a class data member of uchar*
std::memcpy(image_uchar, image.data, image_size * sizeof(uchar));
return image_uchar;
}
Mat BytesToMat(int image_rows, int image_cols, int image_type, void* image_uchar)
{
Mat img(image_rows, image_cols, image_type, image_uchar, cv::Mat::AUTO_STEP);
return img;
}
static SurfFeaturesFinder sf;
void FindFeatures(const int* image_uchar, int image_rows, int image_cols, int image_type, int* descriptors)
{
ImageFeatures features;
Mat img = BytesToMat(image_rows, image_cols, image_type, (void*)image_uchar);
sf(img, features);
int size = 0;
Mat matDescriptor;
features.descriptors.copyTo(matDescriptor);
descriptors = (int*) MatToBytes(matDescriptor, size);
}
显然"描述符"没有更新。 我还需要返回KeyPoint,但是我会在第一步之后处理它。