90度旋转 flip opencv_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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值