cvGetCol, cvGetRow, cvGetCols, cvGetRows, cvGetSubRectで行列の一部分だけを取り出すことができる
幅1の列ベクトルをとってくる.
高さ1の行ベクトルをとってくる.
幅end-startの行列を取ってくる
高さend-startの行列を取ってくる
行列中の一部分を取ってくる
#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準拠