OpenCv整数数组转换
OpenCv integer array conversion
我有一个int数组(实际上是一个名为accum的变量中的维数为numangle*numrho的图像),我想将其转换为opencv-Mat结构进行显示,但遇到了一点麻烦。我创建了一个OutputArray,并用整数数组中的值填充它的数据;由于OutputArray数据显然是uchar(尽管我声明了CV_32SC1,它用于32位有符号整数1通道图像),我按如下方式逐字节填充:
int s = sizeof(accum[0]);
_acc.create(numangle+2,numrho+2,CV_32SC1);
Mat accumulator = _acc.getMat();
for(int r = 0; r < numrho; r++ )
for(int n = 0; n < numangle; n++ )
{
int base = r * (numangle)+n;
accumulator.data[base*s+3] = accum[base] & 0xFF;
accumulator.data[base*s+2] = (accum[base]>>8) & 0xFF;
accumulator.data[base*s+1] = (accum[base]>>16) & 0xFF;
accumulator.data[base*s+0] = (accum[base]>>24) & 0xFF;
// accumulator.at(int)(r,n)=accum[base];
}
然而,我似乎最终得到了一个1位的图像,尽管尺寸正确。我的指针算术有点生疏,也许我不需要基数。此外,如果我使用累加器。在(x,y)时,它会明显慢一些吗?
尝试:
int index=0;
for(int r = 0; r < numrho; r++ )
{
int* row=reinterpret_cast<int*>(accumulator.ptr(r));
for(int n = 0; n < numangle; n++ )
row[n]=accum[index++];
}
或者,如果数组是一个简单的缓冲区,您可以通过以下操作将其附加到图像上(而不会失去缓冲区的所有权):
Mat image(numrho,numangle,CV_32SC1,accum);
这种方法不会复制数据,这有时正是您想要的。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何在C++中将数组转换为矢量指针
- 将矢量<T>转换为矢量<数组<T>>
- JSON转换为nlohmann JSON-lib中的结构数组
- 将C++中的数组转换为字符串
- NLOHMANN 的 JSON 库将数组转换为结构向量
- 将 int 数组转换为 std::vector<int*>
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- 将链表转换为指针数组时出错
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- 将字节数组转换为带有字节序问题的指针
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 将浮点数转换为无符号字符数组并打印出来
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 在 c++ 中动态强制转换 ** 数组
- 返回并强制转换数组指针(错误:数组下标的类型..无效)
- 用于递归模板求值的强制转换数组类型
- node.js中使用node-gyp的转换数组
- 如何转换数组中的参数列表