当我更改其他 Mat 对象时,垫子值会更改

  • 本文关键字:对象 其他 Mat c++ opencv
  • 更新时间 :
  • 英文 :


当我复制一个 Mat 对象时,其他 Mat 对象中的值意外更改。更改发生在两个打印语句之间。这是为什么呢?

Mat flow;
calcOpticalFlowFarneback(u_prev, u_curr, u_flow, 0.5, 2, 20, 3, 15, 1.2, OPTFLOW_FARNEBACK_GAUSSIAN);
flow = u_flow.getMat(ACCESS_READ);
cout << "1 " << flow.ptr<Pixel2>(680,192)->x << endl;

Mat out_img;
resized_frame.copyTo (out_img);
cout << "2 " << flow.ptr<Pixel2>(680,192)->x << endl;

输出如下

1 164.812
2 8.42217e-21

Mat::ptr的参数Mat::ptr(int row, int col)如文档中所述。由于flow是 480x852 矩阵,因此flow.ptr<Pixel2>(680, 192)访问越界行并读取矩阵外部的内存。最有可能的是,内存位置被分配给程序中的不同变量(在这种情况下可能是out_img(,该变量会随着时间的推移而更改。它甚至可能在某些平台上出现段错误,具体取决于编译器使用的内存布局。

最新更新