En proyectos anteriores hemos insertado texto en un vídeo (OpenCV 3.1 sobre QT 5 en Linux - Texto en video), en este caso insertaremos en el vídeo la tasa de fotogramas que capaz de procesar OpenCV en una acción.

Los Fotogramas por segundo, también conocido como tasa de refrescamiento, fps o frame por segundo, es la velocidad (tasa) a la cual un dispositivo muestra imágenes llamadas cuadros o fotogramas. La tasa de refrescamiento se expresa en cuadros por segundo o por la sigla en inglés FPS (de frames per second).

Es muy importante obtener este dato para así conocer el rendimiento o velocidad de procesamiento de cada imagen.

Descripción del proyecto

El proyecto consiste en  desplegar la tasa de fotogramas la cual es capas de procesar OpenCV.

Este tutorial se basa en el previamente desarrollado OpenCV 3.1 sobre QT 5 en Linux - Texto en video por lo que la mayor parte del codigo se encuentra explicado ahí.

Consideraciones clave
cv::GetTickCount();

La función GetTickCount devuelve el número de milisegundos transcurridos desde que se inició, en nuestro caso al iniciar el proceso de captura.

cv::getTickFrequency();

La función getTickFrequency devuelve la frecuencia de muestreo altener estos datos es posible obtener los fotogramas aplicando la siguiente formula.

fps=frecuencia/(tiempo_final-tiempo_inicial)
Código de los métodos principales

Se omitieron los namespaces para fines académicos, ya que de esta forma el lector sabrá a que clase corresponde cada método.

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget* parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

/**
 * Metodo para obtener la direccion del video
 * @brief MainWindow::SeleccionarVideo
 */
void MainWindow::SeleccionarVideo()
{
    // Declara la variable con la ruta del archivo
    QString archivo = QFileDialog::getOpenFileName(this, tr("Abrir Video"),
        "",
        tr("Videos (*.avi *.mp4 *.mov)"));
    //Agrega la ruta del archivo
    ui->labelVideo->setText(archivo);
    ui->radioVideo->setChecked(true);
}

/**
 * Metodo para procesar el video frame a frame si ckecked==true
 * @brief MainWindow::ProcesarVideo
 * @param checked
 *
 */
void MainWindow::ProcesarVideo(bool checked)
{

    unsigned long Atime;
    int fps;

    cv::destroyAllWindows(); // Para cerrar todas las ventanas

    cv::Mat frame; // Frame como array multidimencional

    if (!checked) { // Si !checked detiene el video si no lo procesa
        ui->play->setText("Iniciar video");
        cap.release();
    }
    else {
        ui->play->setText("Parar video");

        if (ui->radioVideo->isChecked()) { // si el "radio button" esta seleccionado ejecuta el video si no la webcam
            cap.open(ui->labelVideo->text().toStdString().c_str());
        }
        else {
            cap.open(0);
        }
    }

    while (checked) // bucle hasta que se precione "parar video"
    {
        Atime = cv::getTickCount();

        cap >> frame; // obtiene un nuevo frame del video o camara
        if (frame.empty())
            break; // detiene el bucle si elframe esta vacio
        cv::namedWindow("Reproductor", cv::WINDOW_KEEPRATIO); // creamos una ventana la cual permita redimencionar

        fps = cv::getTickFrequency() / (cv::getTickCount() - Atime);

        //insertamos el texto en el video
        cv::putText(frame, //frame o imagen
            cv::format("%d fps", fps), //texto en formato estandar
            cv::Point(20, 60), // ubicacion del texto
            cv::FONT_HERSHEY_TRIPLEX, // fuente del texto
            2, // tamano del texto
            cv::Scalar(255, 255, 255), // color del texto
            4); // ancho del texto

        cv::imshow("Reproductor", frame); // se muestran los frames
        char key = (char)cv::waitKey(10); //espera 20ms por la tecla ESC
        if (key == 27)
            break; //detiene el bucle
    }
}

void MainWindow::on_toolButton_clicked()
{
    SeleccionarVideo();
}

void MainWindow::on_actionAbrir_Video_triggered()
{
    SeleccionarVideo();
}

void MainWindow::on_play_toggled(bool checked)
{
    ProcesarVideo(checked);
}

Para mayor detalle puede descargar el código fuente desde aquí: