0

マトリックスを渡して処理済みのマトリックスを返す関数を1つ作成しましたが、処理済みのマトリックスのデータが、渡したマトリックスにコピーされています。

    output=processMatrix(srcCopy);

次に、これらのマトリックスの両方を表示すると、srcCopy で同じ画像を取得し、出力も行います。メモリを次のように割り当てています。

    output=Mat(image.rows,image.cols,CV_8UC1 );
    srcCopy=Mat(image.rows,image.cols,CV_8UC1 );
4

2 に答える 2

2

問題は、cv::Matコピーコンストラクタがソースの浅いコピーcv::Matを実行することです。ここを参照してください。おそらくあなたがする必要があるcv::MAt::clone()のは、オリジナルのクローンを作成するためのメソッドを使用することです。次に、関数パラメータリストの浅いコピーを回避できます。

cv::Mat skeletonize(const cv::Mat& m) { 
  // use clone() in here to make a new Mat and return it
}
于 2012-06-28T07:03:41.823 に答える
0

を使用Mat Mat::clone()してコピーを作成できます。

Mat dst= src.clone();
src.Release();

Mat Cloneのドキュメント

于 2012-06-28T07:18:26.593 に答える