在 OSX 上的 opencv2.4.10 中垫子显示不同

Mat show different in opencv2.4.10 on OSX

在opencv的工程中,程序如下:

Mat A = Mat(9, 2, CV_16S );
int x0,y0;
ifstream fr("points.txt",ios::in);
for (int j=0; j<9; j++) {
            frs >> x0;
            frs >> y0;
            A.at<float>(j, 0) = x0;
            A.at<float>(j, 1) = y0;
        }
cout << A << endl;

但我得到了输出:

[0, -16080;
  0, 0;
  0, 16640;
  0, -16160;
  0, -16384;
  0, 16656;
  0, -16128;
  0, 16448;
  0, 16640]

据推测,文件frs中的数据是:

 -11 -8
  0  -6 
  8  -6 
 -7  -11 
 -2  -10 
  9  -10 
 -8  -14 
  3  -16
  8  -18

我是不是做错了什么?

首先,输入文件流的名称是fr,但你试图从frs读取点。

[更新]

您使用了错误的垫子类型 CV_16S 而不是 CV_32F。在这里您可以找到更多信息。参见 Mat::depth。 http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html

此代码应该有效。

Mat A = Mat(9, 2, CV_32F);
float x, y;
std::ifstream fr("points.txt", std::ios::in);
for (int j = 0; j < 9; j++) {
    fr >> x >> y;
    A.at<float>(j, 0) = x;
    A.at<float>(j, 1) = y;
}
std::cout << A << std::endl;