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);

上記は float 型の行列では機能するようですが、short を使用する場合は機能しません。

アイデアは、データをコピーするのではなく、rightBestX からのデータ参照を使用することです。x に正常にコピーされました。ただし、コードの最後の行を実行すると、失われます (x の行とは異なります)。また、refcount は x では 2 ですが、leftBestXRegion では 1 です...

繰り返しますが、これはフロートで機能します。ここで何が間違っているのか誰にも分かりますか?

4

1 に答える 1

0

ushortの代わりに使用してみてくださいshort。また、マトリックスが正しく入力されていることを確認してください(これを実行したので、と言っても問題なく動作しますshort

于 2012-10-09T15:23:35.660 に答える