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