cvGetCol, cvGetRow, cvGetCols, cvGetRows, cvGetSubRectで行列の一部分だけを取り出すことができる

CvMat* cvGetCol(CvMat* src, CvMat* sub, int col);

幅1の列ベクトルをとってくる.

引数

返り値

CvMat* cvGetRow(CvMat* src, CvMat* sub, int row);

高さ1の行ベクトルをとってくる.

引数

返り値

CvMat* cvGetCols(CvMat* src, CvMat* sub, int start, int end );

幅end-startの行列を取ってくる

引数

返り値

CvMat* cvGetRows(CvMat* src, CvMat* sub, int start, int end );

高さend-startの行列を取ってくる

引数

返り値

CvMat* cvGetSubRect(CvMat* src, CvMat* sub, CvRect rect);

行列中の一部分を取ってくる

引数

返り値

解説

サンプルコード

#geshi(c++,number){{

IplImage *inputImage;
CvMat *inputMatrix, *subMatrix, stub;

inputImage  = cvLoadImage(INPUT_FILE, CV_LOAD_IMAGE_GRAYSCALE);
inputMatrix = cvCreateMat(inputImage->height, inputImage->width, CV_8UC1);
cvCopy(inputImage, inputMatrix);                     // この関数は値渡し(コピー)
subMatrix   = cvGetRows(inputImage, &stub, 10, 20);  // 10行目-19行目をsubMatrixに格納(参照渡し,以下同じ)
subMatrix   = cvGetRow(inputMatrix, &stub, 10);      // 10行目をsubMatrixに格納
subMatrix   = cvGetCols(inputMatrix, &stub, 10, 20); // 10列目-19列目をsubMatrixに格納
subMatrix   = cvGetCol(inputImage, &stub, 10);       // 10列目をsubMatrixに格納
subMatrix   = cvGetSubRect(inputMatrix, &stub, cvRect(10, 10, 50, 50));
                                                     // (10,10)-(60,60)をsubMatrixに格納
cvReleaseImage(&inputImage);
cvReleaseMat(&inputMatrix);
//cvReleaseMat(&subMatrix);  // Releaseしても大丈夫だが,通常は不要

}}

#geshi(c++,number){{

CvMat *WorldCoordinates, *subMatrix, stub;
CvRect rect;
// 斉次座標で表された実空間の座標100個
WorldCoordinates = cvCreateMat(4, 100, CV_32FC1);
// WorldCoordinatesにデータをセット
FetchData(WorldCoordinates);
// 斉次座標を正規化
cvConvertPointsHomogenious(WorldCoordinates, WorldCoordinates);
// 範囲を指定(50番目から10個,3次元座標を取得)
// cvRect(x, y, width, height);の順に指定
rect      = cvRect(50, 0, 10, 3);
// ここで,subMatrixに部分行列が入る
subMatrix = cvGetSubRect(WorldCoordinates, &stub, rect);

}}

実体ファイル

注意

ジャンル:OpenCV:OpenCV 1.0準拠


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-05-27 (木) 11:58:23