C++ opencv 获取当前帧在视频中的位置(即当前帧是视频的第几帧)?
时间: 2023-11-27 07:49:17 浏览: 195
VC++读取视频帧
5星 · 资源好评率100%
可以使用 `cv::VideoCapture` 类来打开视频文件,并使用 `cv::VideoCapture::get()` 函数获取当前帧的位置。具体实现如下:
```cpp
#include <iostream>
#include <opencv2/opencv.hpp>
int main()
{
cv::VideoCapture cap("test.mp4"); // 打开视频文件
if (!cap.isOpened()) {
std::cout << "Failed to open the file!" << std::endl;
return -1;
}
double fps = cap.get(cv::CAP_PROP_FPS);
int total_frames = cap.get(cv::CAP_PROP_FRAME_COUNT);
cv::Mat frame;
while (true) {
cap >> frame; // 读取当前帧
if (frame.empty())
break;
int current_frame = cap.get(cv::CAP_PROP_POS_FRAMES); // 获取当前帧在视频中的位置
std::cout << "Current frame: " << current_frame << std::endl;
cv::imshow("Frame", frame);
if (cv::waitKey(1000 / fps) == 27) // 按 ESC 键退出循环
break;
}
cap.release();
cv::destroyAllWindows();
return 0;
}
```
在上面的代码中,`cv::CAP_PROP_FPS` 和 `cv::CAP_PROP_FRAME_COUNT` 函数分别用来获取视频帧率和总帧数。`cv::CAP_PROP_POS_FRAMES` 函数用来获取当前帧在视频中的位置。
阅读全文