OpenCV 子矩阵(类型短)的问题

Issue with OpenCV submatrix (type short)

本文关键字:问题 类型 OpenCV      更新时间:2023-10-16

我在创建一个从更大的矩阵中获取的新(子)矩阵时遇到了问题,我希望有人能向我伸出援助之手。

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

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,但左最佳XRegion为1...

同样,这适用于浮点数。有谁知道这里可能出了什么问题?

尝试使用 ushort 而不是 short 。另外,检查您是否正确填写了矩阵(我只是这么说,因为我运行了它,即使使用short它对我来说也可以正常工作)