从uint16指针创建Mat

时间:2018-04-16 09:42:21

标签: c++ opencv

我发现openCV正在开发一个项目,我有一个 C#插件,它调用 C ++ DLL 来进行处理。 C#处理Mat,但我的合作伙伴向我发送了一个指向C#到C ++的矩阵的指针。所以我试图使用这个指针再次创建一个矩阵,因为我不知道如何通过DLL在两个不同的语言之间传递Mat对象。

目前,我的C ++方法是:

double CustomData::calculate(LPVOID ptr)
{
    double sum = 0;
    UINT16* src = (UINT16*)ptr;

    for (int y = 0; y < _height; y++) {
        for (int x = 0; x < _width; x++) {
            sum += src[y*_width + x];
        }
    }
    return sum;
}

我想现在使用 openCV 中的Mat来查看平均值的计算时间是否更快,还因为我需要在此矩阵之后执行更多操作。所以我需要从我得到的指针创建一个Mat对象。我最好的尝试是下一个:

Mat image(_height, _width, CV_16UC1, src);

但是我得到unsigned char作为这个矩阵的数据。我认为我正确使用了构造函数,所以我认为问题更多的是我传递给函数的指针?

1 个答案:

答案 0 :(得分:1)

由于您的数据为unsigned short(或ushort),您可以将矩阵创建为:

Mat image(_height, _width, CV_16UC1, (ushort*)src);

要获取指向数据的指针,您不应使用data(其类型始终为uchar*),但ptr

ushort* pointer_to_data_start = image.ptr<ushort>(); // or image.ptr<ushort>(0)
ushort* pointer_to_row_i_start = image.ptr<ushort>(i);