为什么VideoCapture在成员函数中不起作用?

时间:2018-07-16 04:56:10

标签: c++ opencv pthreads

我花了几个小时试图从具有相同类成员函数的成员Thread中读取cv :: VideoCapture帧。创建,读取和imshow()的所有常规代码都在该成员函数中。

我以为问题出在Thread中,但是我做了一些测试代码并在成员函数中找到了它。

该测试代码:

main.cpp:

#include "myclass.hpp"

int main(int argc, char *argv[])
{
    myclass m;
    m.run();

    return 0;
}

myclass.hpp

class myclass
{
public:
    myclass();
    virtual ~myclass();

    void run();
};

myclass.cpp

#include <opencv/cv.h>
#include <opencv2/opencv.hpp>
#include "myclass.hpp"

myclass::myclass()
{
}

myclass::~myclass()
{
}

void myclass::run()
{
    cv::VideoCapture capture(0);
    cv::Mat frame;

    while(true)
    {
        capture.read(frame);
        cv::imshow("TEST", frame);
    }
    capture.release();
}

编译正常,但不能正常工作。它显示空的“ TEST”窗口。

为什么在bember函数中cv :: VideoCapture :: read(cv :: Mat)不起作用?

PS:opencv v3.4.2

1 个答案:

答案 0 :(得分:2)

根据有关imshow的参考

  

此函数后应跟cv :: waitKey函数,该函数将显示图像指定的毫秒数。 否则,它将不会显示图像

只需添加对waitKey()函数的调用

capture.read(frame);
cv::imshow("TEST", frame);
cv::waitKey(25);