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)、
25 (INT)(* 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 }