簡體   English   中英

如何同時在不同的QT小部件上顯示多個視頻

[英]how I can display multiple videos on different QT widgets at the same time

我完成了一個代碼,在不同的QWidgets上運行OpenCV的不同算法..因此,我有3個選項卡,每個選項卡都應顯示攝像機實時流並對其進行處理..我在第一個選項卡小部件中捕獲了視頻並通過通過全局引用其他選項卡...但是我遇到了這個問題

libv4l1: error setting pixformat: Device or resource busy
HIGHGUI ERROR: libv4l unable to ioctl VIDIOCSPICT

雖然我只有一個捕獲..

有任何想法嗎?

解決此問題的正確方法是復制相機獲取的幀 ,並將其提供給其他選項卡。 不要共享capture界面!

我也在使用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);

};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM