将Mat转换为**float
Convert Mat to **float
我有一个OpenCV函数,返回类型是Mat。我如何将其转换为二维浮点数组(** float)?
可能很简单,但是我自己做不到
快速查看Mat
类的文档并没有显示任何明显的'转换为float**
'操作符,但您可能可以手工完成:
Mat mat = (Mat_<float>(3,3) << 1, 0, 0, 0, 1, 0, 0, 0, 1);
// allocate and initialize a 2d float array
float **m = new float*[mat.Rows];
for (int r = 0; r < mat.Rows; ++r)
{
m[r] = new float[mat.Cols];
for (int c = 0; c < mat.Cols; ++c)
{
m[r][c] = mat.at(r, c);
}
}
// (use m for something)
// don't forget to clean up!
for (int r = 0; r < mat.Rows; ++r)
{
delete[] m[r];
}
delete[] m;
如果您不死心塌地地使用float**
,您可以使用std::vector
或boost::multi_array
来避免尴尬的内存分配/释放并减少泄漏的可能性。
你可能也有一些运气使用Mat::ptr<float>(n)
获得float*
到矩阵的n
行,但如果你不复制数据,我不确定什么保证你会有多长时间的指针将保持有效。
如果你是这个意思,
float a[M][N]; //M and N are compile-time constants!
float **p = a; //error
则不能这样做。
但是,你可以这样做:
float (*p)[N] = a; //ok
但如果这对你没有帮助,你想要float**
不惜任何代价,然后使用两个for
循环,并手动执行,将每个元素从a
复制到p
:
相关文章:
- 没有合适的构造函数可以从"float"转换为"_D3DCOLORVALUE"
- 错误:无法将"float*"转换为"float"
- 有没有一种优雅的方法可以将矢量<复杂<float>>转换为矢量<short>?
- MBED RTOS将Float转换为字符串/字符阵列
- 错误:无法将参数"1"的"float*"转换为"float"
- 有没有快速的方法可以将std::vector<std::vector<float>>转换为std::vector<float2>?
- 将 const float* 转换为 std::array<float, ...>
- 当float转换为int时,此代码中是如何/为什么进行缩小的
- Arduino 无法在初始化时将'float'转换为'const char*'
- C++11自动.从float转换为long
- g++ 在不使用 -Wconvert 的情况下将 double/float 转换为无符号整数时发出警告
- 从 std::vector<std::vector<float>> 转换为 float**
- 在opencv中将垫子转换为矢量<float>和矢量<float>转换为垫子
- 代码一直说:“[错误]无法将参数'1'的'float*'转换为'float'到'void test(flo
- 从'float'转换为'LONG'需要缩小转换范围
- 错误:初始化时无法将'float*'转换为"qreal* {aka double*}"
- Int16_t到float转换的奇怪
- 使用JNI将float*转换为jfloatArray
- 将google::p rotobuf::RepeatedField<float>转换为浮动
- 将float转换为int时的奇怪行为