OpenCVのイメージデータをコピーしようとしたら、できない?なんでと思って結構悩んでしまいました。よく考えてみると当たり前なのですが。
そもそも、OpenCV のMat型というのものは、次のようになっている(結構略)。
サイズとかデータの型の情報:実体
画像のデータ:ポインタ
はぅ!!画像のデータも実体で入っているものとばかり思い込んでいた。
ということで本題。
void func(cv::Mat getImage){
static cv::Mat imageInFunc;
imageInFunc=getImage;
return;
}
ってな感じで書いても、ポインタを代入しているだけなのでデータは保存されていない。元のデータが書き変われば、imageInFuncを表示させてみても、データは書き換わり続ける。
で、どうすればいいかというと。cloneってものがあるのね。
void func(cv::Mat getImage){
static cv::Mat imageInFunc;
imageInFunc=getImage.clone;
return;
}
で解決。あほなことに2時間ほど費やしてしまった。
参考:
OpenCVでまずやること『Mat』
知っておきたいMatのゴリ知識
cv::Matの基本処理
0 件のコメント:
コメントを投稿