小编Nya*_*uko的帖子

由于捕获缓冲区,OpenCV VideoCapture滞后

我正在通过网络摄像头捕获视频,该网络摄像头提供了一个mjpeg流.我在工作线程中进行了视频捕获.我像这样开始捕获:

const std::string videoStreamAddress = "http://192.168.1.173:80/live/0/mjpeg.jpg?x.mjpeg";
qDebug() << "start";
cap.open(videoStreamAddress);
qDebug() << "really started";
cap.set(CV_CAP_PROP_FRAME_WIDTH, 720);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 576);
Run Code Online (Sandbox Code Playgroud)

摄像机以20fps的速度输入流.但是,如果我像这样以20fps读取:

if (!cap.isOpened()) return;

        Mat frame;
        cap >> frame; // get a new frame from camera
        mutex.lock();

        m_imageFrame = frame;
        mutex.unlock();
Run Code Online (Sandbox Code Playgroud)

然后有3秒多的延迟.原因是捕获的视频首先存储在缓冲区中.当我第一次启动摄像机时,缓冲区被累积但我没有读出帧.所以如果我从缓冲区读取它总是给我旧帧.我现在唯一的解决方案是以30fps的速度读取缓冲区,这样它就可以快速清理缓冲区并且没有更严重的延迟.

有没有其他可能的解决方案,以便每次启动相机时我都可以手动清理/刷新缓冲区?

c++ video opencv

21
推荐指数
2
解决办法
4万
查看次数

在哪里可以找到Qt的dll的pdb文件?

我正在调试Qt应用程序.我在哪里可以找到Qt的调试DLL?我在Windows上使用vs2010.它说它需要来自Qt的许多.dll的pdb文件.

c++ qt pdb

11
推荐指数
3
解决办法
9338
查看次数

Qt moveToThread:对象带来了哪些资源?

假设我创建了一个QObject a,它有一个成员QObject b.(实际上,A和B都是QObject的子类,而A类是成员B. b)

b被创建,其母公司为0(默认值).在代码中,如果我从未设置b父级a,并且如果我调用movetothread()移动a到工作线程,那么它也会b被移入该线程吗?

如果它没有被移动,如果我b.init()从工作线程(我移入的a那个)调用哪个使用new运算符来创建另一个b作为父节点的QObject ,那么我将得到以下错误,对吧?

QObject:无法为位于不同线程中的父级创建子级

c++ qt multithreading

10
推荐指数
1
解决办法
1239
查看次数

在隐式共享容器上使用迭代器时,为什么需要先复制?

Qt的文档说明如下:

由于隐式共享,函数返回每个值的容器非常便宜.Qt API包含许多函数,每个值返回一个QList或QStringList(例如,QSplitter :: sizes()).如果要使用STL迭代器迭代这些,则应始终获取容器的副本并遍历副本.例如:

// RIGHT
const QList<int> sizes = splitter->sizes();
QList<int>::const_iterator i;
for (i = sizes.begin(); i != sizes.end(); ++i)
    ...

// WRONG
QList<int>::const_iterator i;
for (i = splitter->sizes().begin();
        i != splitter->sizes().end(); ++i)
    ...
Run Code Online (Sandbox Code Playgroud)

如果应用'错误'方法会发生什么?

c++ qt

9
推荐指数
1
解决办法
181
查看次数

Qt:qthread在关闭期间线程仍在运行时被破坏

我有一节课:

class centralDataPool : public QObject
{
    Q_OBJECT
public:
    centralDataPool(QObject * parent = 0);
    ~centralDataPool();
    commMonitor commOverWatch;

private:
    QThread monitorThread;
    int totalNum;

signals:
    void createMonitor(int);
};
Run Code Online (Sandbox Code Playgroud)

在它的构造函数中我做了:

centralDataPool::centralDataPool(QObject* parent) : QObject(parent),totalNum(0)
{
    connect(this, SIGNAL(createMonitor(int)), &commOverWatch, SLOT(createMonitor(int)));
    commOverWatch.moveToThread(&monitorThread);
    monitorThread.start();
}
Run Code Online (Sandbox Code Playgroud)

当我调用此类的析构函数时,我收到错误消息:

qthread destroyed while thread is still running
Run Code Online (Sandbox Code Playgroud)

但是当我试图在类centralDataPool的析构函数中终止monitorThread时,

centralDataPool::~centralDataPool()
{
    monitorThread.terminate();
}
Run Code Online (Sandbox Code Playgroud)

我得到内存泄漏.

在销毁其所有者对象期间终止线程的正确方法是什么?

c++ qt multithreading qthread

8
推荐指数
1
解决办法
8045
查看次数

如何在没有外部计时器的情况下设置QNetworkReply超时?

是否可以设置超时QNetworkReply,因此很长一段时间没有来自服务器的回复,它可以发出finished()信号?

c++ qt

8
推荐指数
1
解决办法
3049
查看次数

问:如何检测是否选中了小部件?

我没有看到任何信号/插槽/功能可以告诉我鼠标是否选中了小部件?有没有可能有这样的功能告诉我当前的QWidget是否被选中?我如何区分"当前小部件被选中"和"其中一个子小部件被选中?"

c++ qt focus widget selection

6
推荐指数
1
解决办法
9523
查看次数

QNetworkAccessManager 如何检查是否有待处理的请求?

在 qt4.8 中,仍然存在 qhttp 类,我可以http->hasPendingRequests()用来检查是否还有待处理的请求。但是在qt5中,我们被迫使用QNetworkAccessManager类来管理http链接。我怎么能实现这个检查?

c++ qt

5
推荐指数
1
解决办法
283
查看次数

QSettings 清除了,它有什么作用?

该文档将该QSettings::clear功能描述为:

删除与此 QSettings 对象关联的主要位置中的所有条目。

回退位置中的条目不会被删除。

但是,这是什么意思?主要位置和后备位置是什么???

qt qsettings

5
推荐指数
1
解决办法
3157
查看次数

如何在QOpenGlWidget的paintGL中使用QPainter

我最近从QGLWidget切换到新的QOpenGlWidget,因为后者缺少renderText()函数.我正在考虑使用QPainter在我的openGL 3D图形上绘制一些文本.

我最初通过paintGL()函数渲染所有内容,如何在该函数中安全地添加QPainter?

我的代码是这样的:

paintGL()
{
    //Raw OpenGL codes
    //....

    //Where to safely use the QPainter?
}
Run Code Online (Sandbox Code Playgroud)

opengl qt

5
推荐指数
1
解决办法
2768
查看次数

标签 统计

qt ×9

c++ ×8

multithreading ×2

focus ×1

opencv ×1

opengl ×1

pdb ×1

qsettings ×1

qthread ×1

selection ×1

video ×1

widget ×1