OpenCV:将浮点数组转换为Mat

3
我正在处理一个与Java相关的项目,需要将一个浮点型数组转换为OpenCV矩阵。
目前我已经完成了以下工作:
System.out.println(Arrays.toString(floats));
Mat imgf = new Mat(2, 100, CvType.CV_32F);
imgf.put(2, 100, floats);
System.out.println(imgf.dump());

变量floats返回该数组(代码的第一行):
[255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 0.0, 127.5, 0.0, 0.0, 0.0, 0.0, 0.0, 255.0, 255.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 127.5, 255.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 127.5, 255.0, 127.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 127.5, 255.0, 127.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 127.5, 255.0, 127.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 255.0, 127.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 255.0, 255.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 255.0, 255.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 255.0, 255.0, 127.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 12.1125, 255.0, 255.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 255.0, 255.0, 255.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 251.8125, 60.5625, 255.0, 255.0, 0.0, 0.0, 0.0, 0.0, 0.0, 255.0, 97.537506, 0.0, 255.0, 255.0, 0.0, 0.0, 0.0, 0.0, 255.0, 135.7875, 0.0, 0.0, 255.0, 255.0, 0.0, 0.0, 0.0, 255.0, 168.9375, 0.0, 0.0, 0.0, 255.0, 191.25, 0.0, 0.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 105.1875, 0.0, 0.0, 0.0, 0.0, 0.0, 255.0, 191.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 255.0, 255.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 12.1125, 255.0, 255.0, 0.0, 0.0]

但我无法将它放入 matimgf

在我尝试打印 mat 的最后一行没有固定的结果,有时我得到:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

有时候会出现这种情况:
[0, 6.7501031e-07, 6.6356984e-07, 9.3232773e-09, 1.4586571e-19, 2.5751176e-12, 6.7500696e-07, 6.6356984e-07, 9.3232773e-09, 1.4586571e-19, 2.5751176e-12, 6.7500696e-07, 6.6356984e-07, 5.8270483e-10, 1.0310071e-08, 2.5747301e-12, 1.458489e-19, 5.8270455e-10, 2.5028963e-12, 1.458489e-19, 2.5751176e-12, 6.7500696e-07, 2.5028963e-12, 1.458489e-19, 5.8270455e-10, 2.5028963e-12, 1.458489e-19, 2.3308182e-09, 6.4900371e-07, 6.6356984e-07, 5.8270483e-10, 2.5028963e-12, 1.458489e-19, 5.8270455e-10, 2.5028963e-12, 1.458489e-19, 4.1653962e-11, 9.3232773e-09, 1.4586571e-19, 4.1653962e-11, 5.8270483e-10, 2.5028963e-12, 1.458489e-19, 5.8270455e-10, 2.5028963e-12, 1.0621065e-05, 1.4586562e-19, 2.5751176e-12, 1.0621065e-05, 1.4586562e-19, 5.8270455e-10, 2.5028963e-12, 1.458489e-19, 5.8270455e-10, 1.0310071e-08, 2.5747301e-12, 6.7500696e-07, 1.0310071e-08, 2.5747301e-12, 1.458489e-19, 5.8270455e-10, 2.5028963e-12, 1.458489e-19, 5.8270455e-10, 6.6356984e-07, 2.3308193e-09, 6.4900371e-07, 2.5028963e-12, 1.458489e-19, 5.8270455e-10, 2.5028963e-12, 1.458489e-19, 9.3232728e-09, 1.4586571e-19, 2.5751176e-12, 1.458489e-19, 5.8270455e-10, 2.5028963e-12, 1.458489e-19, 5.8270455e-10, 6.6356984e-07, 9.3232773e-09, 1.4586571e-19, 5.8270455e-10, 2.5028963e-12, 1.458489e-19, 5.8270455e-10, 2.5028963e-12, 6.7500696e-07, 6.6356984e-07, 2.3308193e-09, 6.4900371e-07, 2.5028963e-12, 1.458489e-19, 5.8270455e-10, 2.5028963e-12, 1.458489e-19, 1.1708638e-19, 5.8270455e-10, 2.5028963e-12;
 1.458489e-19, 2.3308182e-09, 2.5783149e-09, 1.4586568e-19, 2.5751176e-12, 6.7500696e-07, 2.5028963e-12, 1.458489e-19, 5.8270455e-10, 2.5028963e-12, 1.458489e-19, 9.3232728e-09, 1.4586571e-19, 2.5751176e-12, 6.7500696e-07, 2.5028963e-12, 1.458489e-19, 5.8270455e-10, 2.5028963e-12, 1.458489e-19, 4.0292387e-11, 6.638179e-07, 6.6256933e-10, 1.0605886e-08, 9.3232773e-09, 1.4586571e-19, 2.5751176e-12, 1.458489e-19, 5.8270455e-10, 2.5028963e-12, 1.458489e-19, 2.5751176e-12, 4.166012e-11, 6.8247328e-07, 1.4586896e-19, 9.3232728e-09, 1.4586571e-19, 2.5751176e-12, 1.458489e-19, 5.8270455e-10, 2.5028963e-12, 6.7500696e-07, 4.1240284e-08, 4.3673634e-05, 2.5182753e-12, 1.458489e-19, 9.3232728e-09, 1.4586571e-19, 2.5751176e-12, 1.458489e-19, 5.8270455e-10, 6.6356984e-07, 2.3308193e-09, 0.00016614873, 2.5752289e-12, 1.458489e-19, 5.8270455e-10, 6.6356984e-07, 2.3308193e-09, 1.0139325e-08, 5.8270483e-10, 2.5028963e-12, 6.7500696e-07, 6.6356984e-07, 9.3232773e-09, 1.4586571e-19, 2.5751176e-12, 6.7500696e-07, 6.6356984e-07, 9.3232773e-09, 1.4586571e-19, 2.5751176e-12, 6.7500696e-07, 6.6356984e-07, 2.3308193e-09, 2.5350566e-09, 2.57523e-12, 1.458489e-19, 5.8270455e-10, 2.5028963e-12, 1.458489e-19, 2.5751176e-12, 2.6948968e-09, 2.5749502e-12, 1.458489e-19, 5.8270455e-10, 2.5028963e-12, 1.458489e-19, 5.8270455e-10, 2.5028963e-12, 6.7500696e-07, 6.6356984e-07, 5.8270483e-10, 2.5028963e-12, 1.458489e-19, 5.8270455e-10, 2.5028963e-12, 1.458489e-19, 2.5348863e-09, 4.8852866e-39]

我希望能够返回与浮点数组相同的值,该如何解决?
1个回答

2
您提供给 imgf.put(2,100,floats) 的参数不正确。您想从第一个矩阵元素开始,因此请将 rowcol 都设为 0。
float floats[] = { 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, 255.0, ... };
Mat imgf = new Mat(2, 100, CvType.CV_32F);
int row = 0, col = 0;
imgf.put( row, col, floats );

我犯了一个愚蠢的错误,我应该读一下put函数的工作原理。 - Neji Soltani
1
没问题。但要注意,当使用64位浮点值时,put 函数需要不同的参数。 - Daniel R.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接