2012年3月4日日曜日

画像を回転する その3 - OpenCV for Android


前回は変換元と変換後の三点を指定し画像を回転しました。
今回は変換パラメータを指定してアフィン変換行列を計算してみます。

変換パラメータを指定するには、Imgproc.getRotationMatrix2D()メソッドを使用します。

Imgproc.getRotationMatrix2D(Point center, double angle, double scale)

Point center   回転の中心点
double angle   回転角度
double scale   拡大倍率

angleが正の値であれば反時計回りを意味します。
ちなみに単位は度(degree)で90なら単純に90度です。
角度の単位には度に始まり、ラジアンやらゴンやら歩兵ミルやら色々あります。
この手の話になるとラジアンが良く出てきますが、直感的にイメージ出来ないのであまり好きではないです。
「度」最高。


それでは実際にやってみましょう。

まずは元画像です。


30度回転してみます。
Point center = new Point(0.0, 0.0);
double angle = 30.0;
double scale = 1.0;
Mat affineTrans =
  Imgproc.getRotationMatrix2D(center, angle, scale);
Imgproc.warpAffine(mat, dstMat, affineTrans,
  dstMat.size());


パラメータを少し変更してみます。
Point center = new Point(100.0, 100.0);
double angle = 30.0;
double scale = 0.2;
Mat affineTrans =
  Imgproc.getRotationMatrix2D(center, angle, scale);
Imgproc.warpAffine(mat, dstMat, affineTrans,
  dstMat.size());


borderModeを指定してみます。
Point center = new Point(100.0, 100.0);
double angle = 30.0;
double scale = 0.2;
Mat affineTrans =
  Imgproc.getRotationMatrix2D(center, angle, scale);
Imgproc.warpAffine(mat, dstMat, affineTrans, dstMat.size(),
  Imgproc.INTER_LINEAR,Imgproc.BORDER_REFLECT);

またまたサイケな画像がw
でも今回は狙い通りです。

0 コメント:

コメントを投稿