我花了几个小时试图从具有相同类成员函数的成员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
答案 0 :(得分:2)
根据有关imshow的参考
此函数后应跟cv :: waitKey函数,该函数将显示图像指定的毫秒数。 否则,它将不会显示图像。
只需添加对waitKey()
函数的调用
capture.read(frame);
cv::imshow("TEST", frame);
cv::waitKey(25);