从 uint16 指针创建垫子
Create Mat from uint16 pointer
我正在发现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);
相关文章:
- 如何创建指针链?我想创建具有指向更多对象的指针的对象,该对象具有指针.这可能吗?
- c++ 获取非语法使用"&"创建指针
- 在自定义构造函数中的堆上创建指针
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 创建指针会占用大量资源吗?
- 创建指针时是否没有构造函数调用
- 以不寻常的方式创建指针
- 在类中创建指针到另一个对象
- Visual Studio 2015"非标准语法;使用"&"为成员创建指针"
- 创建指针 C++ 时获取段错误
- 当我在 c++ 中创建指针数组时无法读取的内存
- 创建指针列表的正确范例是什么
- 如何在C 11中创建指针映射以静态成员功能
- 奇怪的错误:当没有真正创建指针时,使用已删除的函数'std::unique_ptr<_Tp,_Dp>::unique_ptr
- 如何使用双指针创建指针数组?
- 创建指针数组
- C++:创建指针的副本
- 使用new创建指针数组,这样指针就不会初始化为NULL
- 如何在不从参数列表中创建对象的情况下创建指针
- 如何在定义后创建指针和结构实例