将 Opencv 矩阵旋转 90、180、270 度

Rotate Opencv Matrix by 90, 180, 270 degrees(将 Opencv 矩阵旋转 90、180、270 度)
本文介绍了将 Opencv 矩阵旋转 90、180、270 度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我正在从网络摄像头捕获图像,我需要将其旋转直角.我发现自己有这些功能:

I'm capturing image from webcam and I need to rotate it by right angle. I found myself theese functions:

  1. getRotationMatrix2D - 创建旋转矩阵(不管它是什么)
  2. transform - 通过旋转矩阵将一个矩阵转换为另一个矩阵
  1. getRotationMatrix2D - to create rotation matrix (whatever it is)
  2. transform - transform one matrix to another by rotation matrix

但是,除了黑色区域,我什么也没有.这是我的代码:

But, I don't get anything but black area. This is my code:

   if(rotate_button.click%4>0) {
       double angle = (rotate_button.click%4)*90;  //button increments its click by 1 per click
       Mat transform_m = getRotationMatrix2D(Point(cam_frame_width/2, cam_frame_height/2), angle, 1);  //Creating rotation matrix
       Mat current_frame;
       transform(cam_frame, current_frame, transform_m);  //Transforming captured image into a new one
       cam_frame = Mat((int)current_frame.cols,(int)current_frame.rows, cam_frame_type) = Scalar(0,128,0);  //resizing captured matrix, so I can copy the resized one on it
       current_frame.copyTo(cam_frame);  //Copy resized to original
   }

输出只是黑屏.

推荐答案

Use warpAffine.:

Use warpAffine.:

试试:

Point2f src_center(source.cols/2.0F, source.rows/2.0F);
Mat rot_mat = getRotationMatrix2D(src_center, angle, 1.0);
Mat dst;
warpAffine(source, dst, rot_mat, source.size());

dst 是最终图像

这篇关于将 Opencv 矩阵旋转 90、180、270 度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

Prevent class inheritance in C++(防止 C++ 中的类继承)
Why should I declare a virtual destructor for an abstract class in C++?(为什么要在 C++ 中为抽象类声明虚拟析构函数?)
Why is Default constructor called in virtual inheritance?(为什么在虚拟继承中调用默认构造函数?)
C++ cast to derived class(C++ 转换为派生类)
C++ virtual function return type(C++虚函数返回类型)
Is there any real risk to deriving from the C++ STL containers?(从 C++ STL 容器派生是否有任何真正的风险?)