Я также работаю с OpenCV и Qt. Для эмуляции камеры я использую объект Capture для чтения кадров из видеофайла и отправки их по TCP / IP.
Чтобы сделать ваши фреймы доступными для всех других виджетов, я предлагаю вам создать новый класс, наследующий от QIODevice, инициализировать ваше устройство захвата. Каждый раз, когда вы получаете новый кадр с камеры, вы сохраняете данные в переменную QByteArray и посылаете сигнал readyRead ().
Примечание:
- все ваши виджеты должны быть подключены к сигналу readyRead ()
- как только вы получите новый кадр, не забудьте очистить предыдущие данные
- вам нужно заново реализовать функцию virtual qint64 readData( char * data, qint64 maxSize )
, чтобы иметь возможность читать ваши данные
как-то так
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
class VideoCaptureDevice : public QIODevice
{
Q_OBJECT
public:
VideoCaptureDevice(QObject *parent);
virtual ~VideoCaptureDevice();
private:
VideoCapture m_capture;
QByteArray m_receivedData;
protected:
// from QIODevice
qint64 writeData(const char * data, qint64 maxSize);
qint64 readData(char * data, qint64 maxSize);
};