c++ - 视频的持续时间 (OpenCV)

标签 c++ opencv

我想获取视频的 fps,但无法使用属性 CV_CAP_PROP_FPS。我原以为有了视频的帧数和时长就可以搞定了。问题是我找不到给出持续时间的方法。谁能帮帮我?

谢谢!

最佳答案

首先,在尝试获取/设置某些属性之前,至少从相机/视频中抓取一帧。有时不做也能很好地工作,但最好还是做。
如果它不能解决您的问题,您可以尝试使用不同的属性:

cv::VideoCapture camera("some_movie.avi");
cv::Mat img;
camera >> img;
std::cout << camera.get(CV_CAP_PROP_FPS) << std::endl;
std::cout << camera.get(CV_CAP_PROP_FRAME_COUNT) << std::endl;
std::cout << camera.get(CV_CAP_PROP_POS_AVI_RATIO) << std::endl;
std::cout << camera.get(CV_CAP_PROP_POS_FRAMES) << std::endl;
std::cout << camera.get(CV_CAP_PROP_POS_MSEC) << std::endl;
std::cout << "setting pos avi ratio to 1" << std::endl;
std::cout << camera.set(CV_CAP_PROP_POS_AVI_RATIO, 1.0) << std::endl;
std::cout << camera.get(CV_CAP_PROP_POS_AVI_RATIO) << std::endl; //i think it's not working - returns bad position(same as the first call of camera.get(CV_CAP_PROP_POS_AVI_RATIO)
std::cout << camera.get(CV_CAP_PROP_POS_FRAMES) << std::endl;
std::cout << camera.get(CV_CAP_PROP_POS_MSEC) << std::endl;

结果:

30
1739
0.0333333
1
33.3333
setting pos avi ratio to 1
1
0.0333333
1739
57966.7

使用总时间(最后一帧的时间)和帧数,您可以自行计算 fps。或者,您可以使用第一帧的位置 - 只需将 1.0 除以第一帧的位置即可得到 fps。

关于c++ - 视频的持续时间 (OpenCV),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29120432/

相关文章:

c++ - 带有可变参数的嵌套 C++ 模板

c++ - 重置 CRT 调试堆中的高水计数

c++ - 包含在 main.cpp 中的 header 有效,但在类中抛出错误

c - Opencv FindContours函数

c++ - 区分 C++ 中的 QML 数组和映射/对象类型

c++ - Eigen3 Tensor 类中所有维度的缩减评估

python - 如何在没有导入 cv2 错误的情况下安装 openCV_python?

python - 如何旋转图像以对齐文本以进行提取?

linux - Ubuntu 在输入密码后无法启动

c++ - 如何在 OpenCv 中轻松检测 2 个 ROI 是否相交?