有些计算值不对,经过检查发现
首先你创建一个cv::Mat t1,赋值为0矩阵;
将t1放入容器中。
然后再修改t1,容器内已经插入的t1也会被修改,他们共享内存了。
可以使用.clone来避免这个问题。
std::vector<cv::Mat> test;
cv::Mat t1 = cv::Mat::zeros(4, 4, CV_32F);
test.push_back(t1);
test.push_back(t1.clone());
test.emplace_back(t1);
t1 = t1 + 5;
for (int i = 0; i < test.size(); i++)
{
std::cout << test[i] << std::endl;
}
程序输出为:
[5, 5, 5, 5;
5, 5, 5, 5;
5, 5, 5, 5;
5, 5, 5, 5]
[0, 0, 0, 0;
0, 0, 0, 0;
0, 0, 0, 0;
0, 0, 0, 0]
[5, 5, 5, 5;
5, 5, 5, 5;
5, 5, 5, 5;
5, 5, 5, 5]
可以看到,内存共享了。