У меня есть проблема при создании новой (под) матрицы, которая взята из более крупной матрицы, и я надеялся, что кто-то может протянуть мне руку помощи.
Я сузил проблему до следующего небольшого фрагмента кода:
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);
Вышеуказанное работает для матриц с плавающей запятой, но не для коротких.
Идея состоит в том, чтобы НЕ копировать данные, а использовать ссылку на данные из rightBestX. Он успешно скопирован в x. Однако при выполнении последней строки кода она теряется (отличается от x). Также refcount 2 для х, но 1 для leftBestXRegion …
Опять же, это работает для поплавков. У кого-нибудь есть идеи, что тут может быть не так?
Попробуйте использовать ushort
вместо short
, Кроме того, проверьте, правильно ли вы заполняете свою матрицу (я просто говорю, что, потому что я запустил ее, и она отлично работает для меня даже с short
)
Других решений пока нет …