- 追加された行はこの色です。
- 削除された行はこの色です。
- 行列のコピー へ行く。
cvCopyで行列のコピーを作成できる
#contents
*void Mat::copyTo( OutputArray m ) const; [#b7a158e1]
cv::Mat のメソッド。画像データをコピーする
**引数 [#e3ba0e13]
-m:出力画像。通常はcv::Mat型
**返り値 [#u6d9cab0]
-void型なのでなし
*Mat Mat::clone() const; [#q1dba64c]
画像をまるまるコピーする。
**引数 [#a56f8dbb]
-なし
**返り値 [#x89f2edd]
-新しく生成されたMatオブジェクト
*void cvCopy( CvMat* src, CvMat* dst, CvMat* mask = NULL); [#ja9fd775]
行列srcから行列dstへ中身をコピーする関数.Mat::copyTo のCインタフェース、CvMat版
**引数 [#a8eeee0e]
-src:CvMat*型のコピー元の行列
-dst:CvMat*型のコピー先の行列
-mask:CvMat*型のmask.srcの1部だけをdstにコピーできる.省略可
**返り値 [#ib34d810]
-voidなので値を返さない
*IplImage* cvCloneImage(IplImage* image); [#g8227161]
画像のコピーを作る。Mat::clone のCインタフェース、IplImage版
**引数 [#z1606c91]
-image:IplImage*型の画像
**返り値 [#ze272fd5]
-作られたコピーへのポインタ
*CvMat* cvCloneMat(CvMat* matrix); [#l8a1a118]
行列のコピーを作る。Mat::clone のCインタフェース、CvMat版
**引数 [#b6a835a0]
-matrix:CvMat*型の行列
**返り値 [#g5a4a5d8]
-作られたコピーへのポインタ
*解説 [#s8100fd2]
-srcは言うまでも無く,dstも領域確保されている必要がある.
-CvMat*型のmaskは,0が入っていたらコピーしない,それ以外ならコピーする,のはず.
-画像も行列同様コピーできる.
-cvClone系は領域確保もしてくれる.
--よって,[[領域解放>画像の領域確保]]が必要
*サンプルコード [#w77bd2f6]
**行列の場合 [#o43ea9a2]
CvMat *S = cvCreateMat( 3, 3, CV_32F);
CvMat *R = cvCreateMat( 3, 3, CV_32F);
cvCopy( S, R); //これだけだと空っぽの行列同士のコピーになるが
**画像の場合 [#w82f87ba]
IplImage *input = cvLoadImage("./test.bmp",0);
IplImage *copy = cvCreateImage( cvGetSize(input), input->depth, input->nChannels);
//ここで同じ領域を宣言しておかないといけない
cvCopy( input, copy);
-実際問題,画像だったらcvCloneImageの方が領域確保も同時にやってくれるし,楽だな.
*下位互換性 [#ta6997b5]
cvCopyは昔cvmCopyと言う名前で実装されていた.下位互換性のため,今でもcvmCopyは利用できるが,将来的にOpenCVから削除される可能性があるため,cvCopyを利用することが推奨されている.
参考:[[後方互換関数を使わないようにする>http://d.hatena.ne.jp/DOSEI/20061227/p3]]
*実体ファイル [#e7f194ac]
-[[: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]]準拠