2015年7月18日土曜日

OpenCV イメージデータ(Mat)のコピー(クローン)

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 件のコメント:

コメントを投稿