C++ /Python 将视频中的片段转为图片

 

    1. 配置OpenCV :项目名称->右击->属性
      VC++目录

      包含目录 放 ...\build\include ...\build\include\opencv   ...\build\include\opencv2

       库目录:...\\build\x64\vc14\lib  (VS2015是vc14)

      链接器->输入 附加依赖项:

      opencv_world330.lib
      opencv_world330d.lib

      弹出错误的话:由于找不到opencv_world330d.dll,无法继续执行代码。 opencv_ffmpeg330_64.dll、opencv_world330.dll
      opencv_world330d.dll放入C:\Windows\System32中
    2.  

    3.  C++版本

    4. #include <iostream>
      #include <opencv2/opencv.hpp>
      #include <vector>
      
      using namespace std;
      using namespace cv;
      
      int main()
      {
          VideoCapture cap("test.mp4");
          double fps = cap.get(CV_CAP_PROP_FPS);
          int width = cap.get(CAP_PROP_FRAME_WIDTH);
          int height = cap.get(CAP_PROP_FRAME_HEIGHT);
      
          cout << fps << endl;
          cout << width << endl;
          cout << height << endl;
      
          cap.set(0, 2 * 1000);  //设置起始时间 单位ms
          long pos = cap.get(CAP_PROP_POS_FRAMES);// 获得帧位置
          
      
          int frameToStop = 120;  // 设置帧数
          bool isOpened = cap.isOpened();
          int i = 0;
          Mat frame;
          string fileName;
          char   temp_file[5];
          while (isOpened && pos <= frameToStop)
          {
              i = i + 1;
              bool flag = cap.read(frame);
              sprintf_s(temp_file, "%04d", i);
              fileName = temp_file;
              fileName = fileName + ".jpg";
              cout << fileName << endl;
              if (flag == true )
              {
                  imwrite(fileName, frame);
                  pos = cap.get(CAP_PROP_POS_FRAMES);// 获得帧位置
                  waitKey(1);
              }
              else
              {
                  break;
              }
              
      
      
          }
          cap.release();
          cout << "end" << endl;
          system("pause");
          return 0;
      
      
      }

       Python版本

      import cv2 as cv
      import numpy as np
      import matplotlib.pyplot as plt
      
      '''获取视频信息'''
      cap = cv.VideoCapture('test.mp4') #加载视频
      fps = cap.get(cv.CAP_PROP_FPS) # 获取帧率
      width = int(cap.get(cv.CAP_PROP_FRAME_WIDTH)) # 获取宽度
      height = int(cap.get(cv.CAP_PROP_FRAME_HEIGHT)) # 获取高度
      print(fps,width,height)
      
      '''视频转图片'''
      cap=cv.VideoCapture('test.mp4') #加载视频
      cap.set(0, 3*1000)
      isOpened=cap.isOpened()
      i=0
      while(isOpened):
          i=i+1
          flag,frame=cap.read()
          fileName = '%03d'%i+".jpg"
          print(fileName)
          if flag == True :
              cv.imwrite('%03d'%i+".jpg",frame) # 命名 图片 图片质量,此处文件名必须以图片格式结尾命名
              cv.waitKey(1)
          else:
              break
      cap.release()
      print('end')

       

posted @ 2020-09-02 10:25  重糖爱好者  阅读(484)  评论(1)    收藏  举报