##顯示視頻流的幀率
最近做一個東西,需要在視頻上實時顯示幀速,即FPS。FPS是Frame Per Second的縮寫,中文意思是每秒幀數。開發平臺為VS2013+OpenCV2.4.9。
FPS是測量用于保存、顯示動態視頻的信息數量。通俗來講就是指每秒變化的畫面數。
在計算FPS時,需要使用的主要函數有getTickCount、getTickFrequency。而在輸出圖像上顯示FPS水印則是使用函數putText,他們的簡單聲明如下:
~~~
GetTickCount(void);
在Debug版本中,設備啟動后便從計時器中減去180秒。這樣方便測試使用該函數的代碼的正確溢出處理。
在Release版本中,該函數從0開始計時,返回自設備啟動后的毫秒數(不含系統暫停時間)。
~~~
~~~
getTickFrequency函數:返回每秒的計時周期數,GetTickCount / getTickFrequency就得到一個周期的時間。
~~~
~~~
void putText(Mat& img, // 圖像矩陣
const string& text, // string型內容
Point org, // 字符串的坐標,以左下角為原點
int fontFace, // 字體類型
double fontScale, // 字體大小
Scalar color, // 字體顏色
int thickness = 1, // 字體粗細
int lineType = 8, // 直線類型
bool bottomLeftOrigin = false) // 尚不知是什么功能
~~~
如果想得到一段程序的運行時間,可以套用下面的例子:
~~~
t = (double)cv::getTickCount();
if (capture.isOpened())
{
capture >> frame;
// getTickcount函數:返回從操作系統啟動到當前所經過的毫秒數
// getTickFrequency函數:返回每秒的計時周期數
// t為該處代碼執行所耗的時間,單位為秒,fps為其倒數
t = ((double)cv::getTickCount() - t) / cv::getTickFrequency();
fps = 1.0 / t;
~~~
**實現顯示視頻幀率的簡單代碼:**
~~~
#include <stdlib.h>
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
void main()
{
cv::Mat frame;
// 可從攝像頭輸入視頻流或直接播放視頻文件
//cv::VideoCapture capture(0);
cv::VideoCapture capture("e:/VIDEO0002.mp4");
double fps;
char string[10]; // 用于存放幀率的字符串
cv::namedWindow("Camera FPS");
double t = 0;
while (1)
{
t = (double)cv::getTickCount();
if (cv::waitKey(50) == 30){ break; }
if (capture.isOpened())
{
capture >> frame;
// getTickcount函數:返回從操作系統啟動到當前所經過的毫秒數
// getTickFrequency函數:返回每秒的計時周期數
// t為該處代碼執行所耗的時間,單位為秒,fps為其倒數
t = ((double)cv::getTickCount() - t) / cv::getTickFrequency();
fps = 1.0 / t;
sprintf(string, "%.2f", fps); // 幀率保留兩位小數
std::string fpsString("FPS:");
fpsString += string; // 在"FPS:"后加入幀率數值字符串
// 將幀率信息寫在輸出幀上
putText(frame, // 圖像矩陣
fpsString, // string型文字內容
cv::Point(5, 20), // 文字坐標,以左下角為原點
cv::FONT_HERSHEY_SIMPLEX, // 字體類型
0.5, // 字體大小
cv::Scalar(0, 0, 0)); // 字體顏色
cv::imshow("Camera FPS", frame);
}
else
{
std::cout << "No Camera Input!" << std::endl;
break;
}
}
}
~~~
以上這段程序可以大致測試出視頻處理算法的時間消耗。主要過程是使用以上兩個主要函數得到每幀之間的時間,再用putText把FPS的數值顯示到屏幕上。

參考資料:[http://www.cnblogs.com/jxsoft/archive/2011/10/17/2215366.html](http://www.cnblogs.com/jxsoft/archive/2011/10/17/2215366.html)
[http://blog.csdn.net/boksic/article/details/7017837](http://blog.csdn.net/boksic/article/details/7017837)
- 前言
- Win8.1下OpenCV2.4.9+Qt5.3.2開發環境搭建
- OpenCV2學習筆記(一)
- OpenCV2學習筆記(二)
- OpenCV2學習筆記(三)
- OpenCV2學習筆記(四)
- OpenCV2學習筆記(五)
- OpenCV2學習筆記(六)
- OpenCV2學習筆記(七)
- OpenCV2學習筆記(八)
- OpenCV2學習筆記(九)
- OpenCV2學習筆記(十)
- OpenCV2學習筆記(十一)
- OpenCV2學習筆記(十二)
- OpenCV2學習筆記(十三)
- OpenCV2學習筆記(十四)
- OpenCV2學習筆記(十五)
- OpenCV2學習筆記(十六)
- OpenCV2學習筆記(十七)
- OpenCV2學習筆記(十八)
- OpenCV2學習筆記(十九)
- OpenCV2學習筆記(二十)
- OpenCV2學習筆記(二十一)
- OpenCV2學習筆記(二十二)