Альтернативный метод использования QPainter для отображения кадров с канала камеры на веб-интерфейсе QML - PullRequest
0 голосов
/ 18 октября 2018

Ниже приведен метод, используемый для отображения кадра во внешнем интерфейсе:

Кадр извлекается из объекта cv :: VideoCapture внутри функции QRunnable

void CameraFeedGrabber::run()
{


    while(mStopCapture)
    {
        cv::Mat mat;
        bool isFrameGrabbed = cap->read(mat);// gets the next frame

        if(isFrameGrabbed  )
        {

            emit frameAvailable(mViewId,mat.clone());
        }+;
    }

}

Сигнал излучается из приведенного вышекласс к интерфейсному классу

void QmlInterface::processFrames(int cameraId, cv::Mat mat, bool sessionStatus)
{
    if(GlobalSettings::mQmlVideoIntList.size() > 0)
    {
        cv::Mat matToSend = mat.clone();
        cv::cvtColor(matToSend, matToSend, cv::COLOR_BGR2RGB);
        QImage qFrame1 =  QImage((uchar*)matToSend.data, matToSend.cols, matToSend.rows, matToSend.step, QImage::Format_RGB888);
        GlobalSettings::mQmlVideoIntList[0]->setFrame(qFrame1);
    }

    if(sessionStatus)
        mFrameAssigner->setFrame(mat);
}

Интерфейсный класс вызывает функцию внутри класса отображения для обновления кадра

QmlVideoInterface::QmlVideoInterface(QQuickItem *parent):
    QQuickPaintedItem(parent)
{


}

void QmlVideoInterface::paint(QPainter *painter)
{
    painter->drawImage(0, 0, mCurrentImage.scaled(_imageWidth, _imageHeight, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
}

void QmlVideoInterface::setFrame(const QImage &image)
{
    mutex.lock();
    mCurrentImage = image.copy();
    update();
    mutex.unlock();
}

Использование этого метода прекрасно работает при отображении небольших кадров, но, например, для больших кадров1920 * 1080 использует около 20% ЦП (i7 6700 при 3,40 ГГц).С видеоаналитикой, также запущенной в бэкэнде, это слишком дорого для простого отображения кадра.Есть ли альтернатива этому методу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...