【问题标题】:Issue with OpenCV submatrix (type short)OpenCV 子矩阵问题(短类型)
【发布时间】:2023-03-06 09:17:01
【问题描述】:

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

我已将问题缩小到以下小代码sn-p:

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 的 refcount 也是 2,而 leftBestXRegion 的 refcount 是 1...

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

【问题讨论】:

  • 你不能使用 opencv 的 ROI(感兴趣区域 - 一个子矩阵)来达到你的目的吗?

标签: c++ opencv matrix short submatrix


【解决方案1】:

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

【讨论】:

  • 是的,这就是答案!在我的实现中,我需要一个短的,所以我使用 OpenCV 类型 CV_16SC1 而不是 CV_CV_16UC1。谢谢一百万!
猜你喜欢
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多