• OpenCV flip transpose 实现图像旋转90°、180°、270°


    OpenCV flip transpose 实现图像旋转90°、180°、270°

    AlanWang4523 2019-09-10 20:34:25 1479 收藏 5
    分类专栏: 原创 OpenCV 图像处理
    版权
    在做图像处理时,需用做图像旋转 90°、180°、270° 的操作,OpenCV 中可通过 cv::flip 和 cv::transpose 来配合实现(注意:这俩函数只能实现 90°、180°、270° 的旋转,无法实现任意角度,任意角度可使用 warpAffine);

    flip 函数原型:

    /**
    * 实现图像的翻转
    * @param src 输入的源图像
    * @param dst 输出的目标图像
    * @param flipCode 翻转码,
    * 0 : 表示沿 X 轴翻转
    * > 0 : 如 1,表示沿 Y 轴翻转,
    * < 0 : 如 -1,表示既沿 X 轴翻转,又沿 Y 轴翻转,等价于旋转180°
    * @return
    */
    void flip(InputArray src, OutputArray dst, int flipCode);
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    transpose 函数原型:

    /**
    * 转置,相当于沿对角线翻转
    * @param src 输入的源图像
    * @param dst 输出的目标图像
    * @return
    */
    void transpose(InputArray src, OutputArray dst);
    1
    2
    3
    4
    5
    6
    7
    90°、180°、270° 旋转的实现:

    /**
    * degree 只能是 90°、180°、270°
    * 该角度为顺时针方向,如果想逆时针旋转,将下面的 90° 和 270° 的实现交换即可
    * @param src_img
    * @param degree
    * @return
    */
    cv::Mat rotateImage(cv::Mat& src_img, int degree) {
    if (degree == 90) {
    cv::Mat srcCopy = cv::Mat(src_img.rows, src_img.cols, src_img.depth());
    cv::transpose(src_img, srcCopy);
    cv::flip(srcCopy, srcCopy, 1);
    return srcCopy;
    } else if (degree == 180) {
    cv::Mat srcCopy = cv::Mat(src_img.rows, src_img.cols, src_img.depth());
    cv::flip(src_img, srcCopy, -1);
    return srcCopy;
    } else if (degree == 270) {
    cv::Mat srcCopy = cv::Mat(src_img.rows, src_img.cols, src_img.depth());
    cv::transpose(src_img, srcCopy);
    cv::flip(srcCopy, srcCopy, 0);
    return srcCopy;
    } else {
    return src_img;
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    测试代码:

    void testRotateByOpenCVFlip() {
    std::string pic_path = "./1.jpg";
    cv::Mat image = cv::imread(pic_path.c_str(), cv::IMREAD_COLOR);
    cv::imshow("src_img", image);

    cv::Mat rotateImg = rotateImage(image, 90);

    cv::imshow("dst_img", rotateImg);
    cv::waitKey(0);

    cv::destroyAllWindows();
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    分别旋转90°、180°、270° 效果如下:
    ————————————————
    版权声明:本文为CSDN博主「AlanWang4523」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u011520181/article/details/100710268

  • 相关阅读:
    ssh框架下 写简单的hql语句
    onclick事件 在使用模板填充情况下 向后台传递多值
    调用 sendResponseMsg 遇到的问题
    ERP项目有关时间的修改和查看的显示,去掉时分秒
    ERP中select的填充方法
    最简单的jQuery ajax请求
    ERP中默认申请人和申请部门
    list 按元素的某字段排序方法。作者:黄欣
    C# 对象、文件与二进制串(byte数组)之间的转换【转载】
    .net framework(4.6.2) 迁移 .net core(2.2) 总结
  • 原文地址:https://www.cnblogs.com/adong7639/p/13299744.html
Copyright © 2020-2023  润新知