変換行列を元に、画像を変形する
- void warpPerspective(InputArray before, OutputArray after, InputArray matrix, Size dsize, int flags, int borderMode, const Scalar& borderValue);
- void warpAffine(InputArray before, OutputArray after, InputArray matrix, Size dsize, int flags, int borderMode, const Scalar& borderValue);
- 解説
- サンプルコード
- 実体ファイル
void warpPerspective(InputArray before, OutputArray after, InputArray matrix, Size dsize, int flags, int borderMode, const Scalar& borderValue); †
- beforeをMatrix(ホモグラフィ)に基づいて変換
引数 †
- before:Mat型の画像。座標変換前の画像
- after:Mat型の画像。座標変換後の画像
- matrix:Mat型の変換行列(ホモグラフィ)
- dsize:Size型の出力画像のサイズ
- flag:int型で変換方法のフラグ。詳細は後述。省略した場合はINTER_LINEAR
- borderMode:int型の、境界の対処方法。省略した場合はBORDER_CONSTANT
- borderValue:Scalar型の値。WARP_FILL_OUTLIERSを指定した場合、この色で空いた部分を塗りつぶす
返り値 †
void warpAffine(InputArray before, OutputArray after, InputArray matrix, Size dsize, int flags, int borderMode, const Scalar& borderValue); †
- beforeをMatrix(アフィン行列)に基いて変換
引数 †
- 基本的にwarpPerspectiveと同じ
- before:Mat型の画像。座標変換前の画像
- after:Mat型の画像。座標変換後の画像
- matrix:Mat型の変換行列。2x3(2 rows , 3 columns)の変換行列
- dsize:Size型の出力画像のサイズ
- flag:int型で変換方法のフラグ。詳細は後述。省略した場合はINTER_LINEAR
- borderMode:int型の、境界の対処方法。省略した場合はBORDER_CONSTANT
- borderValue:Scalar型の値。WARP_FILL_OUTLIERSを指定した場合、この色で空いた部分を塗りつぶす
返り値 †
解説 †
- flag、borderMode、borderValueの引数については下記の通り
引数flagについて †
- flagのデフォルト値はINTER_LINEAR。取れる値は以下の通り
- INTER_NEAREST:最近傍補間(0)
- INTER_LINEAR:線型補間(1)
- INTER_CUBIC:バイキュービック補間(2)
- INTER_LANCZOS4:Lanczos補間(4)
- WARP_FILL_OUTLIERS:指定色で外部を塗りつぶす。(8)
- WARP_INVERSE_MAP:逆変換による補間(16)
- INTER_AREAを指定すると、INTER_LINEARに置き換えられる。
引数borderModeについて †
- borderModeのデフォルト値はBORDER_CONSTANT。取れる値は以下の通り
- BORDER_CONSTANT = 0,
- BORDER_REPLICATE = 1,
- BORDER_REFLECT = 2,
- BORDER_WRAP = 3,
- BORDER_REFLECT_101 = 4,
- BORDER_TRANSPARENT = 5,
- BORDER_REFLECT101 = BORDER_REFLECT_101,
- BORDER_DEFAULT = BORDER_REFLECT_101,
引数borderValueについて †
- borderValueのデフォルトは黒(Scalar())
変換方法について †
- ホモグラフィを用いて変換する場合はwarpPerspectiveを、アフィン行列を用いて変換する場合はwarpAffineを使用する
- warpPerspectiveは以下の数式に基づいて変換を行う

- 書き換えると、ヘッダ/ドキュメントにある様な、下記の式になる

- warpAffineは以下の数式に基づいて変換を行う

- 書き換えると、ヘッダ/ドキュメントにある様な、下記の式になる

サンプルコード †
// ホモグラフィによる変換
// 変数宣言
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準拠