首页 > 解决方案 > 当我更改其他 Mat 对象时,Mat 值会更改

问题描述

当我复制一个 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

标签: c++opencv

解决方案


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


推荐阅读