cvCopyで行列のコピーを作成できる

void Mat::copyTo( OutputArray m ) const;

cv::Mat のメソッド。画像データをコピーする

引数

  • m:出力画像。通常はcv::Mat型

返り値

  • void型なのでなし

Mat Mat::clone() const;

画像をまるまるコピーする。

引数

  • なし

返り値

  • 新しく生成されたMatオブジェクト

void cvCopy( CvMat* src, CvMat* dst, CvMat* mask = NULL);

行列srcから行列dstへ中身をコピーする関数.Mat::copyTo のCインタフェース、CvMat版

引数

  • src:CvMat*型のコピー元の行列
  • dst:CvMat*型のコピー先の行列
  • mask:CvMat*型のmask.srcの1部だけをdstにコピーできる.省略可

返り値

  • voidなので値を返さない

IplImage* cvCloneImage(IplImage* image);

画像のコピーを作る。Mat::clone のCインタフェース、IplImage版

引数

  • image:IplImage*型の画像

返り値

  • 作られたコピーへのポインタ

CvMat* cvCloneMat(CvMat* matrix);

行列のコピーを作る。Mat::clone のCインタフェース、CvMat版

引数

  • matrix:CvMat*型の行列

返り値

  • 作られたコピーへのポインタ

解説

  • srcは言うまでも無く,dstも領域確保されている必要がある.
  • CvMat*型のmaskは,0が入っていたらコピーしない,それ以外ならコピーする,のはず.
  • 画像も行列同様コピーできる.
  • cvClone系は領域確保もしてくれる.

サンプルコード

行列の場合

CvMat	*S = cvCreateMat( 3, 3, CV_32F);
CvMat	*R = cvCreateMat( 3, 3, CV_32F);
cvCopy( S, R); //これだけだと空っぽの行列同士のコピーになるが

画像の場合

IplImage *input = cvLoadImage("./test.bmp",0);
IplImage *copy = cvCreateImage( cvGetSize(input), input->depth, input->nChannels);
//ここで同じ領域を宣言しておかないといけない
cvCopy( input, copy);
  • 実際問題,画像だったらcvCloneImageの方が領域確保も同時にやってくれるし,楽だな.

下位互換性

cvCopyは昔cvmCopyと言う名前で実装されていた.下位互換性のため,今でもcvmCopyは利用できるが,将来的にOpenCVから削除される可能性があるため,cvCopyを利用することが推奨されている.

参考:後方互換関数を使わないようにする

実体ファイル

  • :OpenCV 2.4
    • sources/modules/core/include/opencv2/core/core.hpp
    • sources/modules/core/src/copy.cpp
  • :OpenCV 1.0
    • cxcore/include/cxcore.h
    • cxcore/src/cxcopy.cpp

ジャンル:OpenCV:OpenCV 1.0:OpenCV 2.4準拠


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-05-13 (火) 09:20:41 (1291d)