画像を回転する その3(回転する中心の座標および回転角を指定する方法)

前回・前々回は 変換前・変換後の3点を指定して 図形を回転する方法を実験しました。
1)変換前・変換後の3点を指定して
      getAffineTransform で アフィン変換行列を求める。
2)アフィン変換行列 をもとに
      warpAffine でアフィン変換で図形を回転する。

今回は 中心の座標・回転角度・拡大倍率をもとに getRotationMatrix2Dで アフィン変換行列を求める方法を実験します。
public static Mat getRotationMatrix2D(Point center,double angle,double scale)
Point center : 回転の中心座標
double angle : 回転角度(度)+は左回り
double scale : 拡大倍率

 実行結果 

上段:元の画像
下段:元画像の中心で30度左回りに回転し 1/2に縮小する。
  幅・高さを変換前画像にあわせ、変換後の領域がわかるよう 白線で囲ってます。 

int x0 = srcMat.cols() / 2;
int y0 = srcMat.rows() / 2;
Mat rot_mat = Imgproc.getRotationMatrix2D(new Point(x0,y0), 30.0, 0.5);

warpAffineborderModeを指定してみます。(前回を参照してください)

上段:BORDER_REPLICATE
Imgproc.warpAffine(srcMat, dstMat1, rot_mat1,dstMat1.size(),Imgproc.INTER_LINEAR,Imgproc.BORDER_REPLICATE );

下段:BORDER_REFLECT
Imgproc.warpAffine(srcMat, dstMat2, rot_mat2,dstMat1.size(),Imgproc.INTER_LINEAR,Imgproc.BORDER_REFLECT);

 by Android2.2 with OpenCv 2.3.1 for Android   
スポンサーリンク
Rectangle大広告
Rectangle大広告

シェアする

  • このエントリーをはてなブックマークに追加

フォローする