Проблема с подматрицей OpenCV (тип short)


У меня есть проблема при создании новой (суб)матрицы, которая взята из более крупной матрицы, и я надеялся, что кто-то может протянуть мне руку помощи.

Я сузил задачу до следующего небольшого фрагмента кода:

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). Также refcount равен 2 для x, но 1 для leftBestXRegion...

Опять же, это работает для поплавков. Кто-нибудь знает, что здесь может быть не так?

1 2

1 ответ:

Попробуйте использовать ushort вместо short. Кроме того, проверьте, что вы правильно заполняете свою матрицу (я просто говорю это, потому что я запустил ее, и она отлично работает для меня даже с short)