用c++编写一段程序,利用opencv读取一段视频,并实时显示这段视频的帧率
时间: 2024-03-06 11:47:17 浏览: 42
好的,以下是一个简单的示例程序,可以读取视频并实时显示帧率:
```c++
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
// 打开视频文件
VideoCapture cap("test.mp4");
if (!cap.isOpened())
{
cerr << "Error opening video file." << endl;
return -1;
}
// 获取帧率
double fps = cap.get(CAP_PROP_FPS);
if (fps <= 0)
{
cerr << "Error getting frame rate." << endl;
return -1;
}
// 创建窗口
namedWindow("Video", WINDOW_NORMAL);
// 循环读取视频帧
Mat frame;
double t_start = 0;
double t_end = 0;
while (true)
{
// 读取一帧
cap >> frame;
if (frame.empty())
{
// 视频播放完毕
break;
}
// 显示当前帧
imshow("Video", frame);
// 计算帧率
t_end = getTickCount();
double t_delta = (t_end - t_start) / getTickFrequency();
double fps_cur = 1.0 / t_delta;
t_start = t_end;
// 打印帧率
cout << "FPS: " << fps_cur << endl;
// 等待按键
if (waitKey(1) == 'q')
{
break;
}
}
// 释放资源
cap.release();
destroyAllWindows();
return 0;
}
```
在上述代码中,我们首先打开视频文件,然后获取视频的帧率。接着,我们创建一个窗口,循环读取视频帧,并实时显示帧率。最后,我们释放资源并关闭窗口。
需要注意的是,我们通过计算两次 `getTickCount()` 的时间差,来估算每秒钟可以读取多少帧。这种方式可以在很大程度上保证帧率的准确性,但是由于计算量较大,可能会影响程序的性能。如果您需要更高的性能,可以考虑使用其他方式来计算帧率。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)