通过opencv加载、生存视频

[复制链接]
发表于 2025-11-19 14:25:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
【欢迎关注编码小哥,学习更多实用的编程方法和本领】
代码举例:
  1. //opencv加载本地视频文件的2种方法
  2. //方法一:
  3. #if 0
  4. #include <opencv2/opencv.hpp>
  5. #include <iostream>
  6. using namespace std;
  7. //using namespace cv;
  8. int main()
  9. {
  10.         // 创建VideoCapture对象
  11.         cv::VideoCapture capture;
  12.         // 打开视频文件
  13.         capture.open("D:/opencv/videos/xxx.mp4");
  14.         // 检查视频是否成功打开
  15.         if (!capture.isOpened())
  16.         {
  17.                 std::cout << "无法打开视频!" << std::endl;
  18.                 return -1;
  19.         }
  20.         std::cout << "视频加载成功" << std::endl << std::endl;
  21.         // 获取视频信息 - 帧宽和帧高
  22.         double frameWidth = capture.get(cv::CAP_PROP_FRAME_WIDTH);
  23.         double frameHeight = capture.get(cv::CAP_PROP_FRAME_HEIGHT);
  24.         std::cout << "视频帧宽为: " << frameWidth << std::endl;
  25.         std::cout << "视频帧高为: " << frameHeight << std::endl;
  26.         // 获取视频信息 - 帧率
  27.         double frameRate = capture.get(cv::CAP_PROP_FPS);
  28.         std::cout << "视频帧率为: " << frameRate << std::endl;
  29.         // 获取视频信息 - 总帧数
  30.         double totalFrames = capture.get(cv::CAP_PROP_FRAME_COUNT);
  31.         std::cout << "视频总帧数为: " << totalFrames << std::endl;
  32.         // 循环读取视频帧
  33.         cv::Mat frameImg;
  34.         long nCount = 1;
  35.         while (true)
  36.         {
  37.                 // 读取当前帧
  38.                 capture >> frameImg;
  39.                 // 显示当前帧
  40.                 if (!frameImg.empty())
  41.                 {
  42.                         imshow("当前帧", frameImg);
  43.                         if (char(cv::waitKey(int(1000 / frameRate))) == 'q') // 按'q'键退出
  44.                                 break;
  45.                 }
  46.                 else
  47.                 {
  48.                         break;
  49.                 }
  50.                 nCount++;
  51.         }
  52.         // 释放视频资源
  53.         capture.release();
  54.         cv::waitKey(1);
  55.         cv::destroyAllWindows();
  56.         return 0;
  57. }
  58. #endif
  59. //方法二:
  60. #if 0
  61. #include <opencv2/opencv.hpp>
  62. #include <iostream>
  63. using namespace std;
  64. using namespace cv;
  65. int main()
  66. {
  67.         // 创建VideoCapture对象
  68.         VideoCapture capture;
  69.         // 打开视频文件
  70.         capture.open("D:/opencv/videos/big_buck_bunny.mp4");
  71.         // 检查视频是否成功打开
  72.         if (!capture.isOpened())
  73.         {
  74.                 std::cout << "无法打开视频!" << std::endl;
  75.                 return -1;
  76.         }
  77.         std::cout << "视频加载成功" << std::endl << std::endl;
  78.         // 获取视频信息 - 帧宽和帧高
  79.         double frameWidth = capture.get(CAP_PROP_FRAME_WIDTH);
  80.         double frameHeight = capture.get(CAP_PROP_FRAME_HEIGHT);
  81.         std::cout << "视频帧宽为: " << frameWidth << std::endl;
  82.         std::cout << "视频帧高为: " << frameHeight << std::endl;
  83.         // 获取视频信息 - 帧率
  84.         double frameRate = capture.get(CAP_PROP_FPS);
  85.         std::cout << "视频帧率为: " << frameRate << std::endl;
  86.         // 获取视频信息 - 总帧数
  87.         double totalFrames = capture.get(CAP_PROP_FRAME_COUNT);
  88.         std::cout << "视频总帧数为: " << totalFrames << std::endl;
  89.         // 循环读取视频帧
  90.         Mat frameImg;
  91.         int nCount = 1;
  92.         while (true)
  93.         {
  94.                 // 读取当前帧
  95.                 capture >> frameImg;
  96.                 // 显示当前帧
  97.                 if (!frameImg.empty())
  98.                 {
  99.                         imshow("当前帧", frameImg);
  100.                         if (char(waitKey(int(1000 / frameRate))) == 'q') // 按'q'键退出
  101.                                 break;
  102.                 }
  103.                 else
  104.                 {
  105.                         break;
  106.                 }
  107.                 nCount++;
  108.         }
  109.         // 释放视频资源
  110.         capture.release();
  111.         waitKey(1);
  112.         destroyAllWindows();
  113.         return 0;
  114. }
  115. #endif
  116. //从摄像头读取视频流
  117. #if 0
  118. #include <opencv2/opencv.hpp>
  119. #include <iostream>
  120. using namespace std;
  121. using namespace cv;
  122. int main()
  123. {
  124.         // 创建VideoCapture对象
  125.         VideoCapture capture;
  126.         // 打开摄像头
  127.         capture.open(0,CAP_DSHOW);
  128.         // 检查摄像头是否成功打开
  129.         if (!capture.isOpened())
  130.         {
  131.                 std::cout << "无法打开摄像头!" << std::endl;
  132.                 return -1;
  133.         }
  134.         std::cout << "摄像头加载成功" << std::endl << std::endl;
  135.         // 获取摄像头信息 - 帧宽和帧高
  136.         double frameWidth = capture.get(CAP_PROP_FRAME_WIDTH);
  137.         double frameHeight = capture.get(CAP_PROP_FRAME_HEIGHT);
  138.         std::cout << "摄像头帧宽为: " << frameWidth << std::
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表