cvWarpPerspectiveで画像を変換
void cvFindHomography( const CvMat* src_points, const CvMat* dst_points, CvMat* homography ); †
src_pointsをdst_pointsに変換するホモグラフィhomographyを計算する.
引数 †
- src_points:CvMat*型の変換前の座標
- dst_points:CvMat*型の変換後の座標
- homography:CvMat*型のhomography
返り値 †
void cvWarpPerspective(const IplImage* before, IplImage* after, const CvMat* homography, int flag, CvScalar fillval); †
beforeをhomographyに基づいて変換
引数 †
- before:IplImage*型の画像.CvMat*型も可.座標変換前の画像
- after:IplImage*型の画像.CvMat*型も可.座標変換後の画像
- homography:CvMat*型のホモグラフィ
- flag:int型で変換方法のフラグ.下記の組み合わせ
- CV_INTER_LINEAR:共1次内挿
- CV_INTER_CUBIC:共3次内挿
- CV_WARP_INVERSE_MAP:逆内挿
- CV_WARP_FILL_OUTLIERS:指定色で外部を塗りつぶす
- fillval:cvScalar型の値.CV_WARP_FILL_OUTLIERSを指定した場合,この色で空いた部分を塗りつぶす.
返り値 †
解説 †
- src_pointsとdst_pointsには2次元座標を格納する.
- src_pointsは
, dst_pointsは
- 座標は縦横逆にしてもOK
- 斉次座標でもOK
- homographyは線型連立方程式を解いて再投影誤差が小さくなるようなhomographyを求める.
- cvWarpPerspectiveはhomographyに基づき,透視変換を行う
- 変換前の座標を
,変換後の座標を
とすると,次式に様な変換を行う.

- フラグにCV_WARP_INVERSE_MAPを利用した場合,次式の様に逆変換を行う.

- flagのデフォルト値はCV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS
- CV_INTER_LINEARかCV_INTER_CUBICで内挿法を指定する
- CV_INTER_NNとCV_INTER_AREAを指定しても無視される
- CV_WARP_FILL_OUTLIERS,CV_WARP_INVERSE_MAPは加算で指定する.
- fillvalのデフォルトは黒(cvScalarAll(0))
サンプルコード †
// ホモグラフィによる変換
// 変数宣言
IplImage *image, *converted;
CvMat *homography;
homography = cvCreateMat(3, 3, CV_32F); // 領域確保
cvFindHomography(src_points, dst_points, homography); // ホモグラフィ計算
image = cvLoadImage("input.bmp", CV_LOAD_IMAGE_UNCHANGED); // 画像のロード
converted = cvCreateImage(cvGetSize(image), image->depth, image->nChannels);
// 画像の領域確保
cvWarpPerspective(image, converted, homography,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS, cvScalarAll(255));
// ホモグラフィに基づき変換
実体ファイル †
- cv/include/cv.h
- cv/src/cvcalibration.cpp (cvFindHomography)
- cv/src/cvimgwarp.cpp (cvWarpPerspective)
ジャンル:OpenCV:OpenCV 1.0準拠