当前位置:   article > 正文

opencv读取摄像头并读取时间戳

opencv读取摄像头并读取时间戳

下面这行代码是获取摄像头每帧的时间戳

        double timestamp = cap.get(cv::CAP_PROP_POS_MSEC);

改变帧率的方法是:

cap.set(cv::CAP_PROP_FPS, 30);   //帧率改为30

但是实际测试时发现帧率并未被改变,这个可能和VideoCapture cap(cv::CAP_V4L2)有关,cv::CAP_V4L2只是其中一种读取方法,这个参数可能需要和相机采用的驱动方法有关。

编译:

g++ camera_data.cpp -lopencv_core -lopencv_highgui -lopencv_imgcodecs -lopencv_videoio

  1. #include <iostream>
  2. #include <string>
  3. #include <sstream>
  4. #include <fstream>
  5. #include <time.h>
  6. using namespace std;
  7. // OpenCV includes
  8. #include "opencv2/core.hpp"
  9. #include "opencv2/highgui.hpp"
  10. using namespace cv;
  11. int main(int argc, const char** argv)
  12. {
  13. // 1.创建视频采集对象;
  14. VideoCapture cap(cv::CAP_V4L);
  15. // 2.打开默认相机;
  16. cap.open(0);
  17. int curFPS=cap.get(cv::CAP_PROP_FPS);
  18. cout<< "FPS: "<< curFPS<<endl;
  19. cap.set(cv::CAP_PROP_FPS, 30);
  20. int curFpsSet=cap.get(cv::CAP_PROP_FPS);
  21. cout<< "set FPS: "<< curFpsSet<<endl;
  22. // 3.判断相机是否打开成功;
  23. if (!cap.isOpened())
  24. return -1;
  25. namedWindow("Video", 1);
  26. for (;;)
  27. {
  28. // 获取新的一帧;
  29. Mat frame;
  30. double timestamp = cap.get(cv::CAP_PROP_POS_MSEC);
  31. cout<<fixed;
  32. cout<<"time: "<< timestamp<<endl;
  33. time_t end_time = time(NULL);
  34. printf("ctime is %s\n",ctime(&end_time)); //得到日历时间
  35. cap >> frame;
  36. if (frame.empty())
  37. return 0;
  38. // 显示新的帧;
  39. imshow("Video", frame);
  40. // cv::waitKey(1);
  41. // 按键退出显示;
  42. if (waitKey(3) >= 0) break;
  43. }
  44. // 5.释放视频采集对象;
  45. cap.release();
  46. return 0;
  47. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/35348?site
推荐阅读
  

闽ICP备14008679号