画像任意の回転

1つの#include <iostreamの>
 2の#include <opencv2 / opencv.hpp>
 3の#include <両端キュー>
 4。 使用した 名前空間STD;
 5  使って 名前空間CV;
 6  ボイド Rotate_vertical(SRC&マット、マット&DST、フロート角度)// SRC原画像、DST出力画像回転角
7。 {
 8。     フロート RAD =(フロート)(角度/ 180.0 * CV_PI);
 9  
10      // 映像埋める
11。     INT maxBorder =(INT)(MAX(src.cols、src.rowsを)* 1.414);// (2)* SQRT最大で
12である     INT DX =(maxBorder - src.cols)/ 2 ;
 13は、     INTのDy =(maxBorder - src.rows)/ 2 ;
 14      copyMakeBorder(SRC、DST、のDy、Dyを、DX 、DX、BORDER_CONSTANT);
 15  
16      // 回転
。17      Point2fセンター((フロート)(dst.cols / 2)、(フロート)(dst.rows / 2 ));
 18である      マットaffine_matrix = getRotationMatrix2D(センター、角度、1.0) ; // 回転行列を得る
。19      ; warpAffine(DST、DST、affine_matrix、dst.size())
 されている20 
21      // 画像回転演算後の画像を含む最大の矩形
22は、     フロート sinVal = ABS(SIN(RAD))、
 23は     フロート COSVAL = ABS(COS(RAD));
 24      サイズはTargetSizeは(ある(INT)(* src.cols COSVAL src.rows * + sinVal)、
 25INT)(* sinVal src.cols * + src.rows COSVAL))を、
 26は 
27      // 過剰境界をカット
28      INT X =(dst.cols - targetSize.width)/ 2 ;
 29      INT Y =(dst.rows - targetSize.height)/ 2 ;
 30      のRect RECT(X、Y、targetSize.width、targetSize.height)。
31      DST = マット(DST、RECT)。
32  }
 33  のint main()の
 34  {
 35      マットIMG =関数imread(" 1 "0 );
36      マットimg_rotate。
37      フロート角= 78.7 38      Rotate_vertical(IMG、img_rotate、角度)。
39      関数imshow(" 旋转后的图像" 、img_rotate)。
40      waitKey(0 )。
41 }

 

おすすめ

転載: www.cnblogs.com/hsy1941/p/11268306.html