zoukankan      html  css  js  c++  java
  • 图像任意旋转

     1 #include <iostream>
     2 #include<opencv2/opencv.hpp>
     3 #include <deque>
     4 using namespace std;
     5 using namespace cv;
     6 void Rotate_vertical(Mat &src, Mat &dst, float angle)//src原图像,dst输出图像,旋转角度
     7 {
     8     float rad = (float)(angle / 180.0 * CV_PI);
     9 
    10     //填充图像
    11     int maxBorder = (int)(max(src.cols, src.rows)* 1.414); //即为sqrt(2)*max
    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 center((float)(dst.cols / 2), (float)(dst.rows / 2));
    18     Mat affine_matrix = getRotationMatrix2D(center, angle, 1.0);//求得旋转矩阵
    19     warpAffine(dst, dst, affine_matrix, dst.size());
    20 
    21     //计算图像旋转之后包含图像的最大的矩形
    22     float sinVal = abs(sin(rad));
    23     float cosVal = abs(cos(rad));
    24     Size targetSize((int)(src.cols * cosVal + src.rows * sinVal),
    25         (int)(src.cols * sinVal + 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 = Mat(dst, rect);
    32 }
    33 int main()
    34 {
    35     Mat img = imread("1", 0);
    36     Mat img_rotate;
    37     float angle = 78.7;
    38     Rotate_vertical(img, img_rotate, angle);
    39     imshow("旋转后的图像", img_rotate);
    40     waitKey(0);
    41 }
  • 相关阅读:
    打造jQuery的高性能TreeView
    结构化日志类库 ---- Serilog库
    项目管理上的失误和应对措施
    Android分类导航
    Android破解
    Android开发入门
    安装 Android Studio 2.3 详细过程及错误解决
    Python学习思维导图
    设计模式的六大原则 ---- 理论知识
    日志的艺术(The art of logging)
  • 原文地址:https://www.cnblogs.com/hsy1941/p/11268306.html
Copyright © 2011-2022 走看看