从 uint16 指针创建垫子

Create Mat from uint16 pointer

本文关键字:创建 指针 uint16      更新时间:2023-10-16

我正在发现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作为这个矩阵的数据。我认为我正确使用了构造函数,所以我认为问题更多地在于我传递给函数的指针?

由于您的数据是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);