2

在创建一个取自更大矩阵的新(子)矩阵时,我遇到了一个问题,我希望有人能帮我一把。

我已将问题缩小到以下小代码片段:

cv::Mat* rightBestX;
rightBestX = new cv::Mat(4, 4, CV_16UC1); // short matrix

// fill rightBestX matrix with values

const cv::Rect r2(0, 0, 2, 2);
cv::Mat x = rightBestX->operator()(r2);
cv::Mat_<short> leftBestXRegion = x; // x is not equal to cv::Mat_<short>, according template<typename _Tp> inline Mat_<_Tp>& Mat_<_Tp>::operator = (const Mat& m)
//cv::Mat_<short> leftBestXRegion = results.leftBestX->operator()(r2);

以上似乎适用于浮点类型矩阵,但当我使用 short 时则不行。

这个想法是不复制数据,而是使用 rightBestX 的数据引用。它已成功复制到 x。但是,在执行最后一行代码时,它就丢失了(与 x 不同)。x 的引用计数也为 2,而 leftBestXRegion 的引用计数为 1...

同样,这适用于花车。有谁知道这里有什么问题?

4

1 回答 1

0

尝试使用ushort而不是short. 另外,检查你是否正确地填充了你的矩阵(我只是说因为我运行它并且它对我来说很好,即使使用short

于 2012-10-09T15:23:35.660 回答