【问题标题】:change CV_32FC1 to CV_64FC1 result incorrect data conversion将 CV_32FC1 更改为 CV_64FC1 导致数据转换不正确
【发布时间】:2017-07-02 05:56:50
【问题描述】:

我尝试在 OpenCV 中使用 2D 浮点数组初始化 Mat 对象。我将 Mat 的数据类型设置为 CV_64FC1,然后打印出 Mat。打印出来的结果与初始化二维数组不同。

void testConversion()
{  float data[10][2] = 
 {
    {2.5,   2.4},
    {0.5,   0.7},
    {2.2,   2.9},
    {1.9,   2.2},
    {3.1,   3.0},
    {2.3,   2.7},
    {2,     1.6},
    {1,     1.1},
    {1.5,   1.6},
    {1.1,   0.9}
 };


  Mat
     mData(10,2,CV_64FC1,&data);
   cout<<"mData\n"<< mData <<endl;

  return;
 }

结果打印出来显示为:

[6.400002481415868, 0.0002929687607320375;
 25.60000992119312, 3.600000857934356;
 32.00000766217708, 14.40000343546271;
 0.2250000536441803, 0.01406250333820935;
 0.225000053527765, 0.002734374717329047;
 2.541574442831658e-173, 1.956130224762901e-304;
2.779084519612415e-308, 7.165336730703368e-317;
 1.#QNAN, -9.255963134931783e+061;
 -9.255963134931783e+061, -9.255963134931783e+061;
 -9.255963134931783e+061, -9.255963134931783e+061] 

只有当我改变它才有效

Mat
 mData(10,2,CV_64FC1,&data);

Mat
 mData(10,2,CV_32FC1,&data);

有人能解释一下原因吗?提前致谢。

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    您的问题的原因是您的数组类型(浮点数)与 OpenCV 的类型参数 CV_64FC1 不匹配。

    参数 CV_64FC1 确定数据数组应被视为双精度数组,每个值 64 位。

    但是,您的数组有一种浮点类型,每个值有 32 位。 因此,在这种情况下,使用 CV_32FC1 是正确的用法。

    【讨论】:

      猜你喜欢
      • 2011-10-18
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      • 2018-07-12
      • 2014-09-19
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多