如何使用 C++ 在 OpenCV 中旋转视频?

opencvc++server side programmingprogramming

旋转视频与旋转图像类似。唯一的区别在于,我们不是将静态图片加载到图像矩阵中,而是加载视频或从摄像头获取视频流。

这里,我们不是加载视频,而是使用摄像头拍摄视频。如果您想使用视频文件,只需正确输入视频文件的地址即可。

以下程序演示了如何使用 C++ 在 OpenCV 中旋转视频。

示例

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
int main(int argc, char* argv[]) {
   VideoCapture loadvideo(0);//从默认摄像头采集视频//
   namedWindow(&"OriginalVideo");//声明显示原始视频流的窗口//
   namedWindow(&"RotatedVideo");//声明显示旋转视频流的窗口//
   int spinning_angle = 180;//初始旋转角度//
   createTrackbar(&"Rotation", &"RotatedVideo", &rotating_angle, 360);//创建用于旋转的轨迹条//
   while (true) {
      Mat before_Rotating;//声明旋转前图像的矩阵//
      bool temp = loadvideo.read(before_Rotating);//将视频源中的帧加载到矩阵//
      imshow("OriginalVideo", before_Rotating);//显示旋转前的图像帧//
      Mat for_Rotation = getRotationMatrix2D(Point(before_Rotating.cols / 2, before_Rotating.rows / 2), (rotating_angle - 180), 1);//用于二维旋转的仿射变换矩阵//
      Mat after_Rotating;//声明旋转后图像的矩阵//
      warpAffine(before_Rotating, after_Rotating, for_Rotation, before_Rotating.size());//应用仿射变换//
      imshow("RotatedVideo", after_Rotating);//显示旋转后的图像//
      if (waitKey(30) == 27){//等待键盘上按下 Esc 键//
         break;
      }
   }
   return 0;
}

输出


相关文章