使用 cv::waitKey,而不必先调用 cv::namedWindow 或 cv::imshow
Using cv::waitKey without having to call cv::namedWindow or cv::imshow first
我正在使用Qt编写一个GUI程序,并使用OpenCV进行一些视频处理。我在主 GUI 线程的标签中显示 OpenCV 进程的结果(在单独的线程中)。
我遇到的问题是 cv::waitKey 不起作用,除非我打开一个使用 cv::namedWindow 或 cv::imshow 打开的本机 OpenCV 窗口。有人知道如何解决这个问题吗?
简短示例:
void Thread::run()
{
//needed variables
cv::VideoCapture capture(0);
cv::Mat image;
//main loop
//cv::namedWindow("test");
forever
{
capture>> image;
if(!image.data)
break;
emit paintToDisplay(convertToQImage(image));
cv::waitKey(40);
}
}
//cv::namedWindow("test");
即注释,程序崩溃并出现访问冲突错误。
有了cv::namedWindow("test");
即未注释,程序显示完美,但有一个我不想要或不需要的窗口(命名测试)。任何人?
cv::waitKey()
仅适用于OpenCV窗口,这不是您现在使用的窗口。
我建议您研究QT替代方案,很可能是qSleep()
,它由QTest模块提供:
QTest::qSleep(40);
cv::waitkey 是 opencv 的 GUI 循环的一部分,用于显示窗口
如果您只想等待按键,请参阅 QWaitcondition。
或者,您可以显示另一个没有图像的命名窗口,或者一个小的 1,1 像素图像并忽略该窗口
我找到了使用msleep()
的解决方案。它易于使用,因为它是类QThread
的成员。
只是想我会更新这个,以防有类似问题的人发现这个线程。
你可以
调用
qApp->processEvents();
而不是
cv::waitKey(40);
使应用程序响应,并让循环的其余部分完成其工作。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 调用 cv::stereoBM 构造函数时出错
- cv::Mat 内存即使在调用 release() 后也没有释放?
- 逐行填充 cv::mat 调用函数
- OpenCV:错误:与调用'(cv::Mat) (int&, int&)'不匹配
- 使用 cv::waitKey,而不必先调用 cv::namedWindow 或 cv::imshow
- 从 Python 调用 C++ opencv 函数(发送一个 cv :: mat 到 C++ 使用 opencv 的 d
- 如何在OpenCV中调用cv::updateMotionHistory()
- 重载的调用"Point_(cv::P oint2f&)"是不明确的
- Boost/OpenCV 错误:与调用 '(boost::_mfi::d m<void(cv::Mat*, cv::VideoCapture*), Recorder>)
- 我如何调用line或cv::line与OpenCV 3.1
- 错误消息:与调用"(cv::Rect) (cv::Mat&, cv::P oint_, cv:<int>:P oint, cv::Scalar, int)"的调用不匹配
- 如何使用cv-qualifier调用重载成员函数